Windows PowerShell: Общие параметры и переменные среды выполнения

Одна из приятных вещей, касающаяся рабочего процесса, в том, что вы получаете массу интегрированной функциональности. К примеру, каждый процесс, который вы пишете, на внутреннем уровне знает, как вести взаимодействие с удаленными компьютерами средством Windows PowerShell Remoting (удаленное управление Windows, известное как WinRM (Windows Remote Management)).

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

Общие характеристики рабочего процесса

Они все описаны в справочном файле about_WorkflowCommonParameters, хотя вам необходимо вручную импортировать модуль PSWorkflow в Windows PowerShell 3.0, чтоб сделать этот файл видимым. Вот несколько из нередко применяемых характеристик:

-AsJob принуждает рабочий процесс производиться в качестве фонового задания. Связанный с ним параметр -JobName позволяет использовать пользовательское имя задания.
-PSAuthentication позволяет задавать для удаленного соединения механизм аутентификации, к примеру, Kerberos либо Credential Security Support Provider (CredSSP). CredSSP полезен, когда рабочему процессу нужно получить доступ к нелокальным ресурсам, которые требуют дополнительного сетевого «перехода».
-PsComputerName позволяет задать одно либо несколько имен компов, на которых вы планируете запускать рабочий процесс. К примеру, -PSComputerName (Get-ADComputer -filter * | Select -Expand Name) запустит рабочий процесс для всех компьютерах домена. Вы должны осторожно воспользоваться этим параметром.
-PSConnectionRetryCount задает число попыток рабочего процесса подключиться к каждому удаленному компу, а -PSConnectionRetryIntervalSec — количество секунд ожидания меж попытками.
-PSCredential позволяет задать другие учетные данные для удаленных соединений.
-PSParameterCollection позволяет задать хеш-таблицу общих характеристик рабочего процесса. Вы сможете задать перечень хеш-таблиц с запятыми-разделителями, где любая хеш-таблица соответствует подключению к одному либо нескольким компьютерам. К примеру, ниже задается различное число попыток подключения для компов ONE и TWO:
-PSParameterCollection, @{PSComputerName=’ONE’;
PSConnectionRetryCount=10}, @{PSComputerName=’TWO’;
PSConnectionRetryCount=20}
-PSPort и -PSUseSSL позволяют задать другие порты и опционально включить SSL (в предположении, что удаленные компы имеют действительный сертификат SSL и прослушиватель WinRM настроен) для соединения.

Помните, что все рабочие процессы получают эти характеристики. Вам не надо писать ни строчки кода, чтоб они работали. И они бесплатны, что умопомрачительно.

Автоматические переменные рабочего процесса

Все обыденные автоматические переменные Windows PowerShell, такие как $Args, $Error, $MyInvocation, $PSBoundParameters и $PsCmdlet, доступны в рабочем процессе. Рабочие процессы добавляют еще много переменных к тому, что предлагает Windows PowerShell:

$PSParentActivityID предоставляет уникальный идентификатор для текущей области и для всех дочерних областей. Это позволяет совершенно точно идентифицировать каждый экземпляр рабочего процесса, к примеру, когда вы желаете сохранять журнальную информацию в центральном файле.
$PSWorkflowRoot содержит корневой путь рабочего процесса.
$WorkflowInstanceID содержит уникальный идентификатор для экземпляра рабочего процесса.

Весь набор переменных отражает содержимое обрисованных выше общих характеристик рабочего процесса. К примеру, $PSComputerName содержит значение параметра -PSComputerName. Вы также сможете использовать $ParentJobName и $JobName для доступа к инфы задания. Если -PSComputerName содержит несколько значений, то каждый компьютер, где производится рабочий процесс, увидит только свое имя в $PSComputerName. Подробнее см. полный перечень переменных.

Правила переменных

Помните, что переменные в рабочем процессе работают малость по-другому. К примеру, нельзя присвоить переменной итог подвыражения. Заместо:

$x = $(Get-Service)

вы просто выполняете:

$x = Get-Service

Не считая того, нельзя присвоить значение переменной другой переменной в том же выражении:

$a = $b = 23

Вы должны сделать это 2-мя операциями. Не считая того, нельзя поместить объект в переменную и изменять характеристики этого объекта:

$obj = New-PSSessionOption
$obj.SkipCACheck = $true

Ваши собственные характеристики и переменные

В ваших рабочих процессах, естественно, можно вводить определения собственных входных характеристик в блоке Param. В рабочем процессе они представляются в виде переменных. К примеру, определение -MyParam дает снутри рабочего процесса переменную $MyParam. Только не добавляйте общие характеристики рабочего процесса. Их по волшебству добавляет Windows PowerShell при выполнении рабочего процесса.

Общие характеристики деяния

Здесь можно немного запутаться — любая команда, которую вы выполняете в рабочем процессе, либо каждый блок команд, выполняемых в блоке InlineScript{}, считается действием. Windows PowerShell также добавляет к этим действиям общие характеристики, включая -PSComputerName. Так как эти деяния смотрятся как обыденные командлеты, это может привести к неурядице. К примеру:

Get-Process –PSComputerName ONE,TWO,THREE

Обыденный командлет Get-Process имеет параметр -ComputerName, а не параметр -PSComputerName. Последний действителен исключительно в рабочем процессе, где Get-Process на техническом уровне не является командлетом — это действие рабочего процесса. Блок InlineScript{} поддерживает эти характеристики:

InlineScript { Get-Process } –PSComputerName ONE,TWO,THREE

Команды снутри InlineScript{} являются просто командлетами. Они не получают общие характеристики деяния. В конце концов, и просто чтоб еще более запутать вас, неважно какая команда, которая не имеет эквивалентного деяния рабочего процесса, будет неявно обернута в InlineScript{}, но не может использовать общие характеристики деяния. К примеру:

Get-WindowsFeature

Это команда, а не действие рабочего процесса. Эквивалентное действие не доступно. И вы не узнаете об этом, так как это нереально выяснить. Но вы не сможете добавить к нему -PSComputerName. Вот где рабочий процесс докучает, так как нет обычного метода узнать, действие это либо нет. Потому вы не узнаете это, пока не испытаете и не получите фуррор либо беду.

Видите, как все усложняется?

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

Просто помните, что рабочий процесс — это другой мир. Windows PowerShell только обеспечивает шлюз к нему. Не стоит ждать полной согласованности с обыкновенной средой Windows PowerShell.

Аналогичный товар: Комментирование на данный момент запрещено, но Вы можете оставить ссылку на Ваш сайт.

Комментарии закрыты.