Remoting $Using Variable Scope in PowerShell
When working with remote commands in PowerShell, sometimes you may want to use local variables in a remote session. But if you use a local variable in remote commands, it will return an error because the variable is not created in the remote session.
By default, PowerShell expects that the variables in remote commands are defined in the remote session in which the command runs. Using is a special scope modifier that allows you to use local variables in remote commands.
The Using scope modifier identifies variables defined in the local session as a local variable in the remote command. It is introduced in PowerShell 3.0.
This tutorial will teach you to use local variables in remote commands with Using in PowerShell.
Use Using Scope Modifier in PowerShell
The syntax for the Using scope modifier is:
$Using:VariableName
The Using scope modifier is supported in remotely executed commands, starting with Invoke-Command using the ComputerName, HostName, SSHConnection or Session parameters.
The following script shows the $test variable is defined in the local computer and used in the remote session.
$test = "C:\New\complex"
Invoke-Command -ComputerName remotePC -ScriptBlock {
Get-ChildItem $Using:test
}
The first command stores the path of the directory C:\New\complex in the $test variable in the local computer. The second command runs the Get-ChildItem command with the local variable $test in the remote computer.
As a result, it prints the items present in the directory C:\New\complex in the remote computer.
Output:
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
You can also use the Using scope modifier in a PSSession.
In the following example, two variables, $a and $b, are created in the local session and used in the remote session. The $result variable is defined in the remote session, which stores the multiplication of values in $a and $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
}
Output:
The result is 30
We hope this tutorial helped you understand how to use the Using scope modifier for local variables in remote commands. For more information, read about_Remote_Variables.
