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