.

Процесс прост, если ясны основные шаги.

  1. Извлеките текст всех выполненных команд в текущем сеансе PowerShell.
  2. Сохраните извлеченные команды в файле сценария.
  3. Выполните очистку файла сценария. Удалите команды, которые не относятся к выполненной задаче, чтобы получить более аккуратный сценарий.
  4. Сохраните сценарий.

Самый важный этап — правильно извлечь команды. Вряд ли удастся копировать текст из окна PowerShell и вставлять его в файл. Команды могут быть усечены из-за ограниченного размера буфера консоли или разбиты из-за ограниченной длины строки. Кроме того, нужно удалить «мусор», в том числе выходные данные и запросы команды.

Вместо копирования и вставки текста можно воспользоваться командой Get-History. Но если просто запустить Get-History из командной строки, результаты, скорее всего, будут искажены из-за особенностей формата вывода PowerShell. Поэтому используйте такой код:

Get-History -Count 32767 |
Foreach-Object{$_.Commandline}|
Set-Content C:\tmp\demo.ps1

В результате все команды, выполненные в текущем сеансе (верхний предел Get-History — 32 767 команд), будут извлечены и сохранены в файле C:\tmp\demo.ps1. Чтобы сохранить файл сценария в другом месте, просто замените C:\tmp\demo.ps1 на путь к нужному каталогу.

Таким способом можно получить начальный сценарий без «мусора» от разрывов строк, запросов команд и выходных данных. Если команды вводились на нескольких строках, возвращается весь текст команд. Кроме того, если загружались специальные функции, модули, оснастки и сборки. NET в текущем сеансе, в первоначальном файле сценария будет присутствовать код этих дополнений.

Далее сценарий еще требует доработки, но его не придется полностью восстанавливать заново. В вашем распоряжении есть код, с помощью которого уже была выполнена нужная задача, и требуется просто удалить лишние или ошибочные команды.

Алекс Ангелопулос (aka@mvps.org) — старший ИТ-консультант, специализируется на технологиях автоматизации административных задач