Думаю, для тех, кто уже использовал System Center Orchestrator, не является секретом то что очень часто в процедурах приходится использовать скрипты PowerShell (или код C#, смотря что ближе, но сейчас не об этом). Однако, возможности Orchestrator в плане исполнения скриптов PowerShell местами ограничены. Так, например, Orchestrator использует только x86 версию PowerShell, да еще и версии 2, даже если установлен на Windows Server 2012 R2 где доступен PowerShell v4.
Удостовериться в этом можно выполнив такой код, и выведя результаты:
Разумеется, это вызывает проблемы если хочется воспользоваться возможностями новых версий PowerShell или использовать модули которые есть только в x64 версии. К счастью, для этой проблемы доступно несколько обходных решений.
Самый простой метод, это запустить PowerShell.exe, и выполнить скрипт в нём. Я модифицировал вышеприведённый код для использования этой возможности:
Тут можно видеть что хоть и есть некоторые проблемы в форматировании вывода (лишние переносы строк), но зато теперь доступна версия 4.0.
Другое решение, позволяющее добиться такого результата (и при этом сохранив вывод в должном качестве) – это воспользоваться PowerShell Remoting. При этом вовсе необязательно подключаться к другому компьютеру, можно подключиться и к localhost. Но сам Remoting конечно должен быть включен (например, командлетом Enable-PSRemoting). Вот что получается:
Обратите внимание, что нужно обязательно указать параметр –ComputerName, иначе профита не будет.
А что делать если необходимо выполнить достаточно большой скрипт, и при этом вернуть еще несколько переменных? Тут можно воспользоваться, например, встроенным типом данных PowerShell – Hashtable. Hashtable представляет из себя простой набор ключей и соответствующих значений.
На сегодня всё. Дальше будет больше