Сценарии PowerShell
Сценарии PowerShell как и в командной строке CMD и сервере Windows Script Host предоставляют из себя текстовые файлы с программным кодом (команды, операторы и другие конструкции и комментарии на языке PowerShell), которые имею расширение ps1. Чтобы создать PowerShell сценарий, можно использовать несколько вариантов:
- использовать текстовый редактор (например Notepad++) для написания кода.
- ввести нужные команды в самой оболочке PowerShell с последующим их копированием в файл с расширением ps1.
- включить в консоли режим протоколирования с помощью командлета start-Transcript (stop-Transcript для остановки протокола) и уже из создавшегося файла использовать нужные команды.
- оформить в консоли код с помощью обычных или автономных строк, а потом перенаправить их с помощью символов > и >> во внешний сценарий – файл оболочки PowerShell с расширением ps1.
Давайте рассмотрим самый простой пример создания сценария с внедрением в него комментариев PowerShell. Создадим каталог d:\data\script\ в котором будут храниться наши файлы:
PS C:\> md d:\data\script\
Перейдем в созданный каталог:
PS C:\> cd d:\data\script\ PS d:\data\script>
А теперь пропишем простую текстовую строчку и перенаправим ее в файл test.ps1:
PS d:\data\script > '"Это новая текстовая строка"' > test.ps1
Прежде чем запускать созданный сценарий, стоит проверить активную политику безопасности:
PS D:\data\script> Get-ExecutionPolicy RemoteSigned
Если консоль показала, что действует более строгая политика безопасности (Restricted или AllSigned), то с помощью командлета Set-ExecutionPolicy ее можно сменить на другую (запись производится в реестр, поэтому стоит обладать правами администратора):
PS D:\data\script> Set-ExecutionPolicy RemoteSigned
Некий комментарий PowerShell относительно сценариев: для запуска программного файла через консоль, нужно явно указывать путь к нему. Если мы теперь просто пропишем имя файла, то ничего не выйдет:
PS D:\data\script> test.ps1
Мы получим следующее предупреждение:
Условие “test.ps1″ не распознано как командлет, функция, выполняемая программа или файл сценария. Проверьте условие и повторите попытку. В строка:1 знак:8 + test.ps1 <<<<
Теперь попробуем сделать все правильно:
PS D:\data\script> D:\data\script\test.ps1
Это новая текстовая строка
Хорошо, теперь все получилось, но в данном случае, можно использовать и такую конструкцию:
PS d:\data\script> .\test.ps1
Это новая текстовая строка
Тут точка соответствует текущему каталогу. Можно вообще не прописывать расширения для сценария в консоли PowerShell:
PS D:\data\script> .\test
Это новая текстовая строка
Есть и второй способ, что бы запустить сценарии PowerShell – из командной строки cmd или с помощью меню Пуск/Выполнить. Что произвести запуск через Пуск/Выполнить, нам достаточно прописать следующую строчку:
powershell.exe d:\data\script\test.ps1
На короткое время мы увидим окно консоли с прописанной в сценарии строчкой. В отличии от cmd и wsh файлами, PowerShell файлы не удастся запустить двойным щелчком по ним – это сделано в целях безопасности.
Как и функции, сценарии также могут обрабатывать аргументы, для этого можно или использовать переменную $Args (содержит в себе массив все переданных аргументов), или с помощью формальный параметров (для этого надо использовать специальную инструкцию Param). Давайте рассмотрим первый способ, с помощью автономным строк, напишем сценарий allSum.ps1, который будет сообщать количество параметров, с которыми он запушен, и их сумму.
PS D:\data\script>@' >>###################################### >>#Это комментарий PowerShell >>#Работа с входными параметрами >>###################################### >> "Количество аргументов: $($Args.count)" >> $n=0 >> for($i=0; $i -lt $Args.count; $i++) { $n+=$Args[$i]} >> "Сумма аргументов: $n" >> '@ > allSum.ps1 >> PS D:\data\script>
Как видим, с помощью символа # оформляются в PowerShell комментарии. Теперь запустим сценарий с несколькими числовыми параметрами:
PS D:\data\script> .\allsum.ps1 2 4 6 8 9
Количество аргументов: 5
Сумма аргументов: 29
Теперь с помощью специальной инструкции попробуем поработтаь с формальными параметрами. Сама конструкция Param должна быть самой первой командой в файле, предшествовать ей могут только пустые строки и комментарии PowerShell. Создадим сценарий allSum1.ps1 который будет вычислять сумму переданных аргументов:
PS D:\data\script> @' >>###################################### >>#Это комментарий PowerShell >>#Вычисление сумы аргументов >>###################################### >> Param ($x=2, $y=3) >> $x+$y >> '@ > allSum1.ps1 >>
Запустим полученный сценарий с аргументами и без них:
PS D:\data\script> .\allSum1 10 20 30 PS D:\data\script> .\allSum1 5
Хорошо, как видим, если не передавать сценарию PowerShell аргументов, то вычисление сумы произойдет по уже заданным.
Советую почитать:
Опубликовано в рубрике PowerShell