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
;即,它引用函数 test
的 body 作为 脚本块 。
当你使用-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}
有人可以帮我让下面的代码工作吗?
$ab = "1"
function test {
$script:ab = "c"
}
invoke-command -ComputerName localhost ${function:test}
$ab
在 运行 通过调用命令执行上述函数后,我想查看 $ab
的值 "c"注意:${function:test}
是 PowerShell 的 命名空间符号 的一个不寻常实例,等同于
(Get-Item function:test).ScriptBlock
;即,它引用函数 test
的 body 作为 脚本块 。
当你使用-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}