Поделиться через


about_InlineScript

Назначение: Windows PowerShell 3.0

РАЗДЕЛ

about_InlineScript

КРАТКОЕ ОПИСАНИЕ

Описание действия InlineScript, которое выполняет команды Windows PowerShell® в рабочем процессе.

ПОДРОБНОЕ ОПИСАНИЕ

Действие InlineScript выполняет команды в общем сеансе Windows PowerShell рабочего процесса. Оно допустимо только в рабочих процессах.

СИНТАКСИС

    InlineScript {<script block>} <ActivityCommonParameters>

ПОДРОБНОЕ ОПИСАНИЕ

Действие InlineScript выполняет команды в общем сеансе Windows PowerShell. Его можно включить в рабочий процесс для выполнения команд, совместно использующих данные, и команд, которые в противном случае не являются допустимыми в рабочем процессе.

Блок сценария InlineScript может содержать все допустимые команды и выражения Windows PowerShell. Поскольку команды и выражения в блоке сценария InlineScript выполняются в одном сеансе, они совместно используют все состояния и данные, включая импортированные модули и значения переменных.

Действие InlineScript можно разместить в любом месте в рабочем процессе или вложенном рабочем процессе, в том числе внутри цикла или оператора управления либо блока сценария Parallel или Sequence.

Действие InlineScript имеет общие параметры действий, в том числе PSPersist. Однако в командах и выражениях в блоке сценария InlineScript отсутствуют компоненты рабочего процесса, такие как контрольные точки (сохраняемость), и общие параметры рабочих процессов или действий.

ПЕРЕМЕННЫЕ В INLINESCRIPT

По умолчанию переменные, определенные в рабочем процессе, недоступны командам в блоке сценария InlineScript. Чтобы сделать переменные рабочего процесса доступными в InlineScript, используется модификатор области $Using. Модификатор области $Using требуется только один раз для каждой переменной в InlineScript.

В следующем примере показано, что модификатор области $Using делает значение переменной верхнего уровня рабочего процесса $a доступным для команд в блоке сценария InlineScript.

        workflow Test-Workflow
        {
            $a = 3

            # Without $Using, the $a workflow variable is not visible
            # in inline script.
            InlineScript {"Inline A0 = $a"}
    
            # $Using imports the variable and its current value.
            InlineScript {"Inline A1 = $Using:a"}
        }

        PS C:\> Test-Workflow
        Inline A0 = 
        Inline A1 = 3 

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

         workflow Test-Workflow
         {
             $a = 3

             # Changes to the InlineScript variable value do not 
             # change the workflow variable.
             InlineScript {$a = $using:a+1; "Inline A = $a"}
             "Workflow A = $a"

             # To change the variable in workflow scope, return the 
             # new value.
              $a = InlineScript {$b = $Using:a+1; $b}
              "Workflow New A = $a"
        }   

        PS C:\> test-workflow
        Inline A = 4
        Workflow A = 3
        Workflow New A = 4

Замечание по устранению неполадок. Оператор с модификатором области $Using должен стоять до первого использования переменной в блоке сценария InlineScript.

ВЫПОЛНЕНИЕ В ПРОЦЕССЕ

Для повышения надежности команды в блоке сценария InlineScript запускаются в собственном процессе вне процесса, в котором выполняется рабочий процесс, а результат их работы возвращается в рабочий процесс.

Чтобы дать Windows PowerShell команду на выполнение действия InlineScript в рабочем процессе, удалите значение InlineScript из свойства OutOfProcessActivity конфигурации сеанса, например с помощью командлета New-PSWorkflowExecutionOption.

Дополнительные сведения см. в разделе «Выполнение команд Windows PowerShell в рабочем процессе» (https://go.microsoft.com/fwlink/?LinkId=261983).

ПРИМЕРЫ

InlineScript в следующем рабочем процессе содержит команды, которые не допускаются в рабочих процессах, включая использование командлета New-Object с параметром ComObject.

        workflow Test-Workflow
        {
            $ie = InlineScript 
            {
                $ie = New-Object -ComObject InternetExplorer.Application 
                -property @{navigate2="www.microsoft.com"}
           
                $ie
            }
            $ie
        }