invoke-command 执行的函数中的变量不可见

variable in function executed by invoke-command not visible

有人可以帮我让下面的代码工作吗?

$ab = "1"
function test {
$script:ab = "c"

}

invoke-command -ComputerName localhost ${function:test}
$ab

在 运行 通过调用命令执行上述函数后,我想查看 $ab

的值 "c"

注意:${function:test} 是 PowerShell 的 命名空间符号 的一个不寻常实例,等同于
(Get-Item function:test).ScriptBlock;即,它引用函数 testbody 作为 脚本块

当你使用-ComputerName参数时,Invoke-Command使用remoting执行指定的脚本块——即使目标计算机是相同台机器(localhost.)。

远程 在不同的进程中执行代码 运行s 并且无法访问调用者的变量。

因此:

  • 如果本地执行是目标,只需省略 -ComputerName参数;然后,在那种情况下,您可以简单地 运行 . ${function:test} 甚至 test:

    $ab = "1"
    function test { $script:ab = "c" }
    test  # shorter equivalent of: Invoke-Command ${function:test}
    
  • 对于远程执行,从远程执行的脚本块中输出所需的新值并将其分配给$ab 在调用者的范围内:

    $ab = "1"
    function test { "c" } # Note: "c" by itself implicitly *outputs* (returns) "c"
    $ab = Invoke-Command -ComputerName localhost ${function:test}