PowerShell远程执行Remove-Item报Path参数为null无法绑定错误
问题根因
Invoke-Command 执行传入的脚本块时,会在目标远程计算机创建独立的PowerShell会话运行代码,默认不会继承本地会话中定义的变量。你脚本块内引用的$regPath是远程会话内的变量,本地定义的$regPath值没有被传递到远程侧,远程执行时该变量值为$null,因此触发Path参数为空的报错。
手动复制$regPath的输出值硬编码到-Path后可以正常执行,是因为此时参数传入的是固定字符串字面量,不依赖跨会话变量传递。
修复方案
根据你使用的PowerShell版本,二选一即可:
- PowerShell 3.0及以上版本(绝大多数现有环境都满足),直接使用
using:作用域修饰符引用本地变量,写法最简洁:
$regPath = "HKLM:\SOFTWARE\Microsoft\Enrollments\" + $idString $regPath Invoke-Command -ComputerName $ComputerName { Remove-Item -Path $using:regPath -Force -Verbose }
- 全版本兼容写法,通过
-ArgumentList传入参数,在脚本块内用param声明接收:
$regPath = "HKLM:\SOFTWARE\Microsoft\Enrollments\" + $idString $regPath Invoke-Command -ComputerName $ComputerName -ArgumentList $regPath -ScriptBlock { param($targetRegPath) Remove-Item -Path $targetRegPath -Force -Verbose }
补充说明:
HKLM:是PowerShell默认内置的注册表驱动器,远程会话默认会加载,不需要额外做映射处理。
内容的提问来源于stack exchange,提问作者mcgirlja
相关产品推荐
相关产品推荐

