about_Remote_Variables

適用対象: Windows PowerShell 4.0, Windows PowerShell 5.0

トピック

about_Remote_Variables

簡単な説明

リモート コマンドのローカル変数とリモート変数の使用方法について説明します。

詳細な説明

リモート コンピューター上で実行するためのコマンド内に変数を使用できます。単純に、変数に値を代入して、値の代わりに変数を使用します。

既定では、リモート コマンド内の変数は、リモート コマンドを実行するセッションで定義されることになっています。ローカル セッションで定義される変数を使用することもできますが、コマンドの中で、ローカル変数として識別する必要があります。

リモート変数の使用

Windows PowerShell® では、リモート コマンド内の変数は、リモート コマンドを実行するセッションで定義されることになっています。

次の例では、Get-WinEvent コマンドを実行する一時セッションで変数 $ps が定義されます。

        PS C:\>Invoke-Command -ComputerName S1 -ScriptBlock {$ps = "Windows PowerShell"; Get-WinEvent -LogName $ps}

同様に、永続セッション (PSSession) でコマンドを実行するときは、リモート変数を同じ PSSession で定義する必要があります。

        PS C:\>$s = New-PSSession -ComputerName S1

        PS C:\>Invoke-Command -ComputerName S1 -ScriptBlock {$ps = "Windows PowerShell"}

        PS C:\>Invoke-Command -Sessions $s -ScriptBlock {Get-WinEvent -LogName $ps}

ローカル変数の使用

リモート コマンドでローカル変数を使うこともできますが、その変数がローカル セッションで定義されていることを示さなければいけません。

Windows PowerShell 3.0 以降では、リモート コマンド内のローカル変数を識別するために Using スコープ修飾子を使うことができます。

Using の構文は次の通りです。

       The syntax is:
           $Using:<VariableName>       

次の例では、$ps 変数はローカル セッションで作成しますが、コマンドを実行するセッションで使用されます。Using スコープ修飾子は $ps をローカル変数として識別します。ここにセクション本体を挿入します。

        PS C:\>$ps = "Windows PowerShell"
        PS C:\>Invoke-Command -ComputerName S1 -ScriptBlock {Get-WinEvent -LogName $Using:ps}

PSSession でも Using 修飾子を使用できます。

        PS C:\>$s = New-PSSession -ComputerName S1

        PS C:\>$ps = "Windows PowerShell"

        PS C:\>Invoke-Command -Sessions $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}

WINDOWS POWERSHELL 2.0 におけるローカル変数の使用

リモート コマンドでローカル変数を使用するには、リモート コマンドのパラメーターを定義し、Invoke-Command コマンドレットの ArgumentList パラメーターを使用して、ローカル変数をパラメーター値として指定します。

このコマンド形式は Windows PowerShell 2.0 およびそれ以降のバージョンの Windows PowerShell で有効です。

  1. -- リモート コマンドのパラメーターを定義するには param キーワードを使用します。このパラメーター名はプレースホルダーであり、ローカル変数の名前と一致する必要はありません。

  2. -- param キーワードで定義したパラメーターをコマンド内で使用します。

  3. -- Invoke-Command コマンドレットの ArgumentList パラメーターを使用して、ローカル変数をパラメーター値として指定します。

たとえば、次のコマンドでは、ローカル セッションで $ps 変数を定義してから、リモート コマンドで使用します。このコマンドはパラメーター名として $log を使用し、ローカル変数 $ps をその値として使用します。

      C:\PS>$ps = "Windows PowerShell"

      C:\PS>Invoke-Command -ComputerName S1 -ScriptBlock {param($log) Get-WinEvent -logname $log} -ArgumentList $ps

キーワード

about_Using

関連項目

about_Remote

about_PSSessions

about_Scopes

Enter-PSSession

Invoke-Command

New-PSSession