Подтвердить что ты не робот

История powershell: как вы предотвращаете дублирование команд

Фон: История PowerShell намного удобнее для меня сейчас, когда у меня есть способ сохранить истории через сеансы.

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

Теперь я пытаюсь запретить PowerShell сохранять повторяющиеся команды для моего история.

Я попытался использовать Get-Unique, но это не работает, поскольку каждая команда в история "уникальна", потому что каждый имеет другой идентификационный номер.

4b9b3361

Ответ 1

Get-Unique также требует отсортированного списка, и я предполагаю, что вы, вероятно, захотите сохранить порядок выполнения. Попробуйте это вместо

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

В этом подходе используется командлет Group-Object для создания уникальных кодов команд а затем блок Foreach-Object просто захватывает первый элемент в каждом ковше.

Кстати, если вы хотите, чтобы все команды были сохранены в файле истории, я бы использовал предельное значение - 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