PowerShell远程脚本中全局变量$global:user无法访问的问题
问题原因与解决办法
原因
Invoke-Command执行的远程脚本块是在远程机器的独立PowerShell会话中运行的,本地定义的$global:user全局变量并不会自动同步到远程会话里。这就导致远程脚本里调用get-sid $global:user时,实际传入的是$null,自然会触发“无法找到构造函数”“空值表达式调用方法”这类错误。而直接传实际用户名时,是把字符串硬编码在脚本块里,远程会话能直接识别这个字符串,所以能正常执行。
解决办法
有两种常用的方式可以把本地变量传递到远程脚本块中:
方法1:使用-ArgumentList参数传递
通过Invoke-Command的-ArgumentList参数把本地变量传给远程脚本块,然后在脚本块内部用param定义参数接收,或者用$args数组获取:
# 示例代码 Invoke-Command -ComputerName "远程机器名" -ScriptBlock { param($targetUser) get-sid $targetUser } -ArgumentList $global:user
方法2:使用$using:作用域引用本地变量(PowerShell 3.0+支持)
直接在远程脚本块里用$using:前缀引用本地变量,PowerShell会自动把本地变量的值传递到远程会话:
# 示例代码 Invoke-Command -ComputerName "远程机器名" -ScriptBlock { get-sid $using:user }
内容的提问来源于stack exchange,提问作者sbagnato
相关产品推荐
相关产品推荐

