获取远程用户网络打印机时注册表路径用SID变量报错如何解决?
问题根源
你遇到的报错是因为PowerShell 远程会话的变量作用域隔离规则:你在本地定义的$stringSID变量默认无法在Invoke-Command的远程脚本块中直接访问,脚本块运行时$stringSID为空值,最终拼接出的注册表路径缺少了SID段,才会提示路径不存在。
解决方法
有两种常用的传参方案可选:
方案1:使用$using:作用域标记(推荐,适用于PowerShell 3.0及以上版本)
直接在远程脚本块中引用本地变量时,加上$using:前缀即可,修改你的Invoke-Command部分代码如下:
Invoke-Command -Session $Session -ScriptBlock { Get-ChildItem "Registry::\HKEY_Users\$using:stringSID\Printers\Connections" }
方案2:通过-ArgumentList显式传参(兼容PowerShell 2.0)
如果远程机器运行的是PowerShell 2.0版本,没有$using语法支持,可以用参数传递的方式把SID传入远程会话:
Invoke-Command -Session $Session -ScriptBlock { # 接收传入的参数 param($remoteSID) Get-ChildItem "Registry::\HKEY_Users\$remoteSID\Printers\Connections" } -ArgumentList $stringSID
额外注意事项
如果修改后还是提示路径不存在,先确认目标远程机器上对应用户已经登录过(未登录过的用户SID不会加载到HKEY_USERS根路径下),如果用户当前未登录,需要先加载用户的NTUSER.DAT配置单元到注册表再查询。
内容的提问来源于stack exchange,提问作者ornerygoat
相关产品推荐
相关产品推荐

