.
Процесс прост, если ясны основные шаги.
- Извлеките текст всех выполненных команд в текущем сеансе PowerShell.
- Сохраните извлеченные команды в файле сценария.
- Выполните очистку файла сценария. Удалите команды, которые не относятся к выполненной задаче, чтобы получить более аккуратный сценарий.
- Сохраните сценарий.
Самый важный этап — правильно извлечь команды. Вряд ли удастся копировать текст из окна 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) — старший ИТ-консультант, специализируется на технологиях автоматизации административных задач