PowerShell组合Start-Process脚本时REG ADD出现语法错误求助
问题:组合管理员权限启动PowerShell与远程注册表修改脚本时出现REG ADD语法错误
问题详情
两段独立运行正常的PowerShell代码,组合后执行报错:
- 单独启动管理员权限PowerShell:
Start-process Powershell -verb runas - 读取机器名/IP后修改远程注册表的脚本
组合后的完整代码:
Start-process Powershell -verb runas {$Computername = Read-Host "Please put in Computer Name or IP Address" -AsString reg add "\$Computername\HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f Pause}
执行时的错误信息:
请输入计算机名称或IP地址 -AsString: 1.1.1.1
错误: 无效的语法。
输入"REG ADD /?"查看使用方法。
问题原因
- 脚本块传递解析异常:
Start-Process不支持直接将脚本块作为启动参数,这种传递方式会导致PowerShell对脚本内容的解析混乱,参数和变量格式被破坏。 - 变量转义失效:脚本块中的
\$Computername会被当前PowerShell进程提前解析,导致传递给reg add的路径丢失变量值,变成无效路径。 - Read-Host参数错误:
-AsString被错误地当成了提示文本的一部分,导致输入提示格式混乱;同时该参数在PowerShell 5.1+中是默认行为,无需显式指定。
解决办法
将脚本内容作为字符串通过-Command参数传递给新启动的PowerShell进程,同时处理好转义问题:
方案1:使用Here-String(可读性更好)
Start-Process PowerShell -Verb RunAs -ArgumentList "-Command", @" `$Computername = Read-Host '请输入计算机名称或IP地址' reg add "\\`$Computername\HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f Pause "@
方案2:单行字符串转义
Start-Process PowerShell -Verb RunAs -ArgumentList "-Command", "`$Computername = Read-Host '请输入计算机名称或IP地址'; reg add \"\\`$Computername\HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint\" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f; Pause"
关键修正说明
- 用
-ArgumentList明确传递-Command参数,确保新PowerShell进程正确解析脚本内容; - 用反引号
`转义$Computername中的$,保证变量在新进程中才被解析; - 远程注册表路径开头使用双反斜杠
\\,并转义其中的反斜杠,确保reg add识别远程机器路径; - 移除多余的
-AsString参数,避免提示文本混乱。
内容的提问来源于stack exchange,提问作者Royal Rasmussen
相关产品推荐
相关产品推荐

