この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

ワークフローでの Windows PowerShell コマンドの実行

 

適用対象: Windows Server 2012,Windows Server 2012 R2

Windows PowerShell で有効で、ワークフローでは有効でないコマンドまたは式をワークフローで実行するには、inlineScript アクティビティでコマンドを実行します。 inlineScript アクティビティを使用して、ワークフローで Windows PowerShell スクリプト (.ps1 ファイル) を実行することもできます。

inlineScript アクティビティは、標準でワークフロー以外の Windows PowerShell セッションでコマンドを実行し、、ワークフローに出力を返します。 ワークフローでのみ有効です。

inlineScript スクリプト ブロックのコマンドは、1 回のセッションで実行され、変数の値などのデータを共有できます。 既定では、InlineScript セッションは "アウトプロセス" で実行されます。これは、ワーフロー プロセスではなく、独自のプロセスで実行されるということです ただし、この既定はセッション構成の OutOfProcessActivity プロパティの変更によって変更できます。

次の図は、inlineScript アクティビティの構文を示しています。

inlineScript {<script block>} <WorkflowCommonParameters>

アクティビティであってもコマンドレットではないことから、inlineScript アクティビティにアクティビティ共通パラメーターはありますが、Windows PowerShell 共通パラメーターはありません。

inlineScript コマンドを作成する場合、InlineScript スクリプト ブロックのコマンドには、自動複数コンピューター管理などのワークフローの機能はありません。 リモート コンピューターで inlinescript アクティビティのコマンドを実行するには、inlinescript ブロック内でリモート コンピューターへの接続を確立して管理し、コマンドをリモートで実行する必要があります。

inlineScript スクリプト ブロックには、ほかの形ではワークフローで有効にならないコマンド、式、構文など、すべての有効な Windows PowerShell コマンドと式を含めることができます。 スクリプト ブロックのコマンドと式は、変数の値など、すべての状態とデータを共有します。

inlineScript アクティビティは、ループやコントロール ステートメントの内側、Parallel または Sequence スクリプト ブロックなどのワークフロー、または入れ子になったワークフローのどこにでも配置できます。

inlineScript アクティビティには、PSPersist などのアクティビティ共通パラメーターがあります。 ただし、inlineScript スクリプト ブロックのコマンドと式には、チェックポイント処理 ("永続化") またはアクティビティ共通パラメーターなどの、ワークフローの機能はありません。

既定では、ワークフローで定義された変数は、InlineScript スクリプト ブロックのコマンドには表示されません。 ワークフロー変数が InlineScript に表示されるようにするには、$Using スコープ修飾子を使用します。

次の例では、最上位レベルのワークフロー変数の値を 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 an InlineScript variable do not affect
    # the workflow variable.
    InlineScript {$a = $using:a+1; "Inline A = $a"}
    "Workflow A = $a"

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

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

System_CAPS_security セキュリティ メモ

トラブルシューティング上の注意:$Using スコープ 修飾子の付いたステートメントは、InlineScript スクリプト ブロックで使用されるすべての変数より前に表示される必要があります。 Windows PowerShell 3.0 で、$Using スコープ修飾子は InlineScript スクリプト ブロックのどこにでも表示できますが、動作は Windows PowerShell の将来のバージョンで変わる可能性があります。

信頼性を向上するには、InlineScript スクリプト ブロックのコマンドをワークフローが実行されるプロセスの外側の、独自のプロセスで実行し、その出力をワークフロー プロセスに返します。 ワークフロー プロセスで InlineScript アクティビティを実行するように Windows PowerShell に指示するには、New-PSWorkflowExecutionOption コマンドレットの OutOfProcessActivity パラメーターを使用するなどして、セッション構成の OutOfProcessActivity プロパティから InlineScript 値を削除します。

次のコマンド シーケンスは、OutOfProcessActivity プロパティから InlineScript の値を削除し、セッション構成を削除してその値を Microsoft.PowerShell.Workflow セッション構成で復元してから、Enable-PSRemoting コマンドレットを実行して、作成し直す方法を示します。

#To run InlineScript in the workflow process
[ADMIN]: PS C:\> (Get-PSSessionConfiguration Microsoft.PowerShell.Workflow).OutOfProcessActivity
InlineScript
[ADMIN]: PS C:\> $o = New-PSWorkflowExecutionOption -OutOfProcessActivity ""
[ADMIN]: PS C:\> Set-PSSessionConfiguration Microsoft.PowerShell.Workflow -SessionTypeOption $o -Force
[ADMIN]: PS C:\> (Get-PSSessionConfiguration Microsoft.PowerShell.Workflow).OutOfProcessActivity
[ADMIN]: PS C:\> 

#To restore the default setting and run InlineScript out of process
[ADMIN]: PS C:\> (Get-PSSessionConfiguration Microsoft.PowerShell.Workflow) | Unregister-PSSessionConfiguration -Force
[ADMIN]: PS C:\> Enable-PSRemoting -Force
WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.
[ADMIN]: PS C:\> (Get-PSSessionConfiguration Microsoft.PowerShell.Workflow).OutOfProcessActivity
InlineScript

次のワークフローは、InlineScript アクティビティを使用して、Windows PowerShell スクリプト (.ps1 ファイル) をワークフローで実行します。

Workflow Test-Workflow
{
    InlineScript 
    {
        \\Server01\Share01\Get-AssetData.ps1 -All
    }    
} 

次のワークフローの InlineScript には、ComObject パラメーターを使用した New-Object コマンドレットの使用を含めて、Windows PowerShell では有効で、ワークフローでは有効でないコマンドが含まれています。 結果はワークフローに返されるため、ワークフロー アクティビティで使用できます。

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

PS C:>Test-Workflow
Microsoft Corporation: Software, Smartphones, Online, Games, Cloud Computing, IT Business Technology, Downloads
表示: