Powershell Invoke-Command传递环境变量

时间:2018-04-16 15:44:31

标签: powershell invoke-command

我希望使用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的远程计算机?

2 个答案:

答案 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
}