PowerShell での変数スコープ $Using
PowerShell でリモートコマンドを操作する場合、リモートセッションでローカル変数を使用したい場合があります。ただし、リモートコマンドでローカル変数を使用すると、変数がリモートセッションで作成されないため、エラーが返されます。
デフォルトでは、PowerShell は、リモートコマンドの変数が、コマンドが実行されるリモートセッションで定義されていることを想定しています。Using
は、リモートコマンドでローカル変数を使用できるようにする特別なスコープ修飾子です。
Using
スコープ修飾子は、ローカルセッションで定義された変数をリモートコマンドのローカル変数として識別します。PowerShell 3.0 で導入されました。
このチュートリアルでは、PowerShell の Using
を使用してリモートコマンドでローカル変数を使用する方法を説明します。
PowerShell で Using
スコープ修飾子を使用する
Using
スコープ修飾子の構文は次のとおりです。
$Using:VariableName
Using
スコープ修飾子は、ComputerName
、HostName
、SSHConnection
、または Session
パラメーターを使用する Invoke-Command
で始まる、リモートで実行されるコマンドでサポートされます。
次のスクリプトは、$test
変数がローカルコンピューターで定義され、リモートセッションで使用されていることを示しています。
$test = "C:\New\complex"
Invoke-Command -ComputerName remotePC -ScriptBlock {
Get-ChildItem $Using:test
}
最初のコマンドは、ディレクトリ C:\New\complex
のパスをローカルコンピュータの $test
変数に格納します。2 番目のコマンドは、リモートコンピューターでローカル変数 $test
を使用して Get-ChildItem
コマンドを実行します。
その結果、リモートコンピュータのディレクトリ C:\New\complex
にあるアイテムが出力されます。
出力:
Directory: C:\New\complex
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 20-12-2021 19:31 112125 architecture of aqps.png
-a---- 20-12-2021 21:32 33148 formula.png
-a---- 20-12-2021 21:30 55621 modules.png
-a---- 20-12-2021 16:35 190485 output paper.png
PSSession
で Using
スコープ修飾子を使用することもできます。
次の例では、2つの変数 $a
と $b
がローカルセッションで作成され、リモートセッションで使用されます。 $result
変数はリモートセッションで定義され、$a
と $b
の値の乗算を格納します。
$ps = New-PSSession -ComputerName remotePC
$a=5
$b=6
Invoke-Command -Session $ps -ScriptBlock {
$result = $Using:a*$Using:b
Write-Host The result is $result
}
出力:
The result is 30
このチュートリアルが、リモートコマンドのローカル変数に Using
スコープ修飾子を使用する方法を理解するのに役立つことを願っています。詳細については、about_Remote_Variables
をお読みください。