سؤال

الخلفية:

PowerShell التاريخ هو الكثير أكثر فائدة لي الآن أن لدي طريقة حفظ التاريخ عبر جلسات.

# Run this every time right before you exit PowerShell
get-history -Count $MaximumHistoryCount | export-clixml $IniFileCmdHistory;

الآن أنا أحاول منع PowerShell من إنقاذ تكرار الأوامر إلى التاريخ.

حاولت استخدام Get-Unique, ولكن هذا لا يعمل منذ كل الأمر في التاريخ "فريدة من نوعها", لأن كل واحد منهم له رقم معرف.

هل كانت مفيدة؟

المحلول

الحصول على فريدة من نوعها يتطلب أيضا قائمة تم فرزها و أفترض أنك ربما تريد الحفاظ على ترتيب التنفيذ.جرب هذا بدلا من ذلك

Get-History -Count 32767 | Group CommandLine | Foreach {$_.Group[0]} |
Export-Clixml "$home\pshist.xml"

يستخدم هذا النهج مجموعة وجوه cmdlet لخلق فريدة من نوعها دلاء من الأوامر ثم Foreach-كتلة جسم فقط الاستيلاء على البند الأول في كل مجموعة.

BTW إذا كنت تريد جميع الأوامر حفظها إلى ملف التاريخ وأود أن استخدام قيمة الحد - 32767 - إلا إذا كان هذا هو ما يمكنك تعيين $MaximumHistoryCount إلى.

BTW إذا كنت ترغب في حفظ تلقائيا على خروج يمكنك القيام بذلك على 2.0 مثل لذلك

Register-EngineEvent PowerShell.Exiting {
  Get-History -Count 32767 | Group CommandLine |
  Foreach {$_.Group[0]} | Export-CliXml "$home\pshist.xml" } -SupportEvent

ثم لاستعادة عند تحميل كل ما عليك هو

Import-CliXml "$home\pshist.xml" | Add-History

نصائح أخرى

الأمر التالي يعمل PowerShell في ويندوز 10 (اختبار في v. 1803).الخيار هو توثيق هنا.

Set-PSReadLineOption –HistoryNoDuplicates:$True

في الممارسة العملية ، داعيا PowerShell مع الأمر التالي (مثلا ، المحفوظة في اختصار) يفتح PowerShell مع التاريخ دون التكرارات

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -Command Set-PSReadLineOption –HistoryNoDuplicates:$True

لا علاقة مباشرة مكررة ، ولكن بالمثل مفيدة ، AddToHistoryHandler كتلة البرنامج النصي في $PROFILE يبقي قصيرة وبسيطة الأوامر من التاريخ:

$addToHistoryHandler = {
    Param([string]$line)
    if ($line.Length -le 3) {
        return $false
    }
    if (@("exit","dir","ls","pwd","cd ..").Contains($line.ToLowerInvariant())) {
        return $false
    }
    return $true
}
Set-PSReadlineOption -AddToHistoryHandler $addToHistoryHandler
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top