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 をお読みください。
