Powershell Invoke-Command 传递环境变量

标签 powershell invoke-command

我希望使用 Invoke-Command 将环境变量从调用机器传递到执行 Invoke-Command 的服务器。

我希望它能工作:

Invoke-Command -ComputerName MyServer-ScriptBlock {
    $env:VAR=$using:env:USERNAME
    Write-Host $env:VAR
}

但是这个命令的输出是空的。如果我不使用 $using 范围修饰符,而只是直接分配变量,我会得到预期的输出(“VAR”)。

Invoke-Command -ComputerName MyServer -ScriptBlock {
   $env:VAR="VAR"
   Write-Host $env:VAR
}

那么,我可以将 $using 与环境变量一起使用吗?如果没有,是否有一种简单的方法可以将环境变量传递到运行 Invoke-Command 的远程计算机?

最佳答案

一种选择是在调用之前将环境变量分配给标准变量:

$username = $env:USERNAME

Invoke-Command -ComputerName MyServer-ScriptBlock {
    $env:VAR=$using:userName
    Write-Host $env:VAR
}

请注意,在您的 session 结束后,像这样分配环境变量 ($env:VAR=<value>) 将不会持续存在。使用 Environment.SetEnvironmentVariable()方法。

关于Powershell Invoke-Command 传递环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49861301/

相关文章:

.net - 是否可以通过命令行设置 powershell 不透明度

powershell - iTextSharp文本文件将在横向 View 中变为PowerShell

powershell - Invoke-Command 行为澄清

powershell - 使用Invoke-Command调用脚本时在PowerShell中获取脚本目录

c++ - 我们可以在不使用 pCmdInfo->lpVerb 的情况下执行右键单击吗

powershell - 格式化包含哈希表值的Powershell字符串

cmd 中的 azure 登录有效,但 powershell 失败 - 在公司代理后面

selenium - 如何在远程计算机上运行 Protractor 测试

powershell-4.0 - Invoke-Command 比命令本身更快?

powershell - Jenkins powershell 插件正在运行 32 位 Powershell,我需要 64 位