有人可以帮我解决下面的代码吗?
$ab = "1"
function test {
$script:ab = "c"
}
invoke-command -ComputerName localhost ${function:test}
$ab
通过invoke-command运行上述函数后,我想看到$ ab
的值“c”答案 0 :(得分:2)
注意:${function:test}
是PowerShell的命名空间符号的一个不常见的实例,相当于
(Get-Item function:test).ScriptBlock
;即,它引用函数test
的 body ,作为脚本块。
当您使用-ComputerName
参数时,Invoke-Command
使用远程处理执行指定的脚本块 - 即使目标计算机是相同机器(localhost
或.
)。
远程执行的代码在不同的进程中运行,无法访问调用者的变量。
因此:
如果本地执行是目标,只需省略 -ComputerName
参数;然后再次,在这种情况下,您只需运行. ${function:test}
甚至只是test
:
$ab = "1"
function test { $script:ab = "c" }
test # shorter equivalent of: Invoke-Command ${function:test}
对于远程执行,输出远程执行的脚本块中所需的新值,并将其分配给调用者范围内的$ab
:< / p>
$ab = "1"
function test { "c" } # Note: "c" by itself implicitly *outputs* (returns) "c"
$ab = Invoke-Command -ComputerName localhost ${function:test}