PowerShell التاريخ:كيف يمكنك منع تكرار الأوامر ؟
-
08-07-2019 - |
سؤال
الخلفية:
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