В большинстве случаев вы используете для открытия Windows PowerShell соответствующий значок в меню «Пуск». Однако иногда оболочку нужно открывать из программы. Обычно это требуется при запуске сценария по расписанию или при выполнении сценария в составе внешнего командного файла.
В этих и многих других ситуациях ключом к выполнению задачи является исполняемый файл PowerShell.exe. Он находится в установочной папке Windows PowerShell.
PowerShell.exe запускает новый сеанс оболочки, но этим его возможности не ограничиваются. У команды есть масса параметров командной строки, которые указывают ей, как себя вести. Чтобы получить полный список параметров, а также узнать их назначение, в командной строке выполните команду PowerShell -?.
Выполнение команды
Параметр –command принимает одну команду Windows PowerShell вместе с ее параметрами. Если в строке команды есть пробелы или параметры, ее надо заключить в кавычки. При необходимости можно даже включить целый конвейер командлетов.
Можно также задействовать параметр –file. Он передает путь и имя файла .PS1. После этого Windows PowerShell выполнит содержимое файла. Так намного проще выполнить сложную последовательность команд, чем пытаться втиснуть их в параметр –command. Имейте в виду, что политика выполнения оболочки влияет на выполнение сценариев, что подводит нас к следующей теме.
Политика выполнения
Параметр –executionpolicyparameters принимает один из вариантов политики выполнения Windows PowerShell: Unrestricted, AllSigned, RemoteSigned и Restricted. Заданная политика будет действовать только в текущем сеансе и возьмет верх над любыми политиками, ранее заданными локально средствами Set-ExecutionPolicy или объектов групповых политик (GPO).
Секундочку, а разве это не пробел в безопасности? Разве GPO не запрещено переопределять? Нет и еще раз нет. Политика выполнения — это вам не брандмауэр, и она не заменяет собой ПО защиты от вирусов. Она предназначена для того, чтобы неопытные пользователи неосторожно не выполнили недоверенный сценарий. Если вы задаете параметр –executionpolicy, то по определению считается, что вы делаете это сознательно и осознаете возможные последствия. На вас лежит ответственность за последствия такого действия.
Получение выходных данных
Обычно все, что выполняется в сеансе Windows PowerShell выводится программой PowerShell.exe как текст. Если вам нужна просто текстовая информация, тогда вас это вполне устроит.
Но есть другой вариант: задать параметр –outputformat XML, чтобы PowerShell.exe выводила объекты, возвращаемые сценарием или командой. Полученные объекты можно сериализовать в файла CliXML. По сути это то же самое, как если бы вы заставили оболочку передать объекты по конвейеру в Export-CliXML. Это позволяет получить выходной формат данных, которые потом проще повторно импортировать в другой сеанс оболочки.
Другие приемы
Есть еще три других параметра командной строки, о которых надо знать.
- -noProfile предотвращает загрузку оболочкой Windows PowerShell сценариев профилирования в процессе выполнения. Если вы знаете, что такие сценарии вам не нужны, отменив их загрузку вы можете сэкономить немного времени. Этот параметр также полезен, если какой-то из профилей вызывает неполадки. Можно открыть оболочку без него и постепенно устранять неполадки.
- -noExit заставляет оболочку выполнить все, что указано в параметрах –command или –file, и оставить оболочку открытой. Обычно при использовании этих параметров по завершении работы оболочка закрывается, что обычно и требуется . Обычно при использовании этих параметров по завершении работы оболочка закрывается, что обычно и требуется . Это полезно при отладке и проверке только что полученных в процессе выполнения результатов.
- -nonInteractive разрешает выполнение оболочки, но не выводит для пользователя интерактивных запросов. Этот параметр часто используется в связке с –command или –file.
Освоение PowerShell.exe
Использование PowerShell.exe предоставляет много возможностей выполнения сценариев, управления выходной информацией и т. п. Очень удобно иметь в резерве этот вариант при настройке запуска сценариев по расписанию, выполнении сценариев входа, выполнении команд в составе более крупного пакета и для многих других задач.