从CMD调用带-File参数的PowerShell脚本传参失败求助
问题排查:CMD向PowerShell脚本传参导致COM端口访问被拒(参数含换行符)
问题背景
在一台Windows 10笔记本上,通过管理员权限CMD执行powershell -File C:\Users\me\test.ps1 "COM4"时,出现COM4端口访问被拒错误;但直接在管理员PowerShell中执行脚本传参正常,另一台同系统笔记本无此异常。已设置PowerShell执行策略为Unrestricted,调试发现CMD传递的参数$args[0]前后带有换行符,推测是PowerShell参数处理配置差异导致。
排查方向
检查PowerShell原生参数传递配置
执行以下命令查看两台机器的参数传递模式:$PSNativeCommandArgumentPassing异常机器可能为
Legacy模式,正常机器为Standard或Windows。可在CMD调用时显式指定模式测试:powershell -ExecutionPolicy Unrestricted -File C:\Users\me\test.ps1 -PSNativeCommandArgumentPassing Standard "COM4"在脚本中清洗参数空白字符
直接对传入参数做过滤处理,消除换行、回车等无效字符,修改脚本如下:[Byte[]] $On = 0xA0,0x01,0x01,0xA2 $cleanPort = $args[0].Trim("`n","`r"," ") $port = new-Object System.IO.Ports.SerialPort $cleanPort,9600,None,8,one $port.Open() $port.Write($On, 0, $On.count) $port.Close()验证是否因参数格式问题导致端口访问失败。
对比PowerShell版本差异
执行命令查看版本:$PSVersionTable.PSVersion不同版本(如PowerShell 5.1与7.x)的默认参数解析行为存在差异,尝试将两台机器升级/降级到同一版本测试。
检查CMD字符编码设置
在CMD中执行chcp查看代码页,异常机器若使用非标准编码(如非936/437),临时切换编码后测试:chcp 936 powershell -File C:\Users\me\test.ps1 "COM4"对比系统环境变量差异
在CMD中执行set导出环境变量,对比两台机器的PowerShell相关变量(如PSModulePath),排查是否有异常变量影响参数解析。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

