我希望使用Invoke-Command将调用机器的环境变量传递给正在执行Invoke-Command的服务器。
我希望这项工作:
Invoke-Command -ComputerName MyServer-ScriptBlock {
$env:VAR=$using:env:USERNAME
Write-Host $env:VAR
}
但此命令的输出为空。如果我不使用$ using scope修饰符,只是直接分配变量,我得到预期的输出(“VAR”)。
Invoke-Command -ComputerName MyServer -ScriptBlock {
$env:VAR="VAR"
Write-Host $env:VAR
}
那么,我可以在环境变量中使用$ using吗?如果没有,是否有一种简单的方法可以将环境变量传递给运行Invoke-Command的远程计算机?
答案 0 :(得分:1)
一种选择是在调用之前将环境变量分配给标准变量:
$username = $env:USERNAME
Invoke-Command -ComputerName MyServer-ScriptBlock {
$env:VAR=$using:userName
Write-Host $env:VAR
}
请注意,一旦您的会话结束,分配这样的环境变量($env:VAR=<value>
)将不会持续存在。使用Environment.SetEnvironmentVariable()方法执行此操作。
答案 1 :(得分:0)
我认为你可以使用-ArgumentList
。见https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-6
Invoke-Command -ComputerName MyServer -ArgumentList $env:USERNAME -ScriptBlock {
Param ($x)
Write-Host $x
}