You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell调用Lenovo OneCLI参数解析异常无法识别--bmc问题求助

问题根因

  • 复制粘贴引入的不可见控制字符:从CMD复制到PowerShell的--bmc参数前/内部存在零宽空格、非断空格这类不可见Unicode字符,导致PowerShell解析时无法将其识别为合法的可执行文件参数,语法高亮异常就是字符异常的直接表现,手动重输入后字符是标准ASCII的-,所以能正常执行。
  • PowerShell 5.1原生可执行文件参数解析逻辑存在边界缺陷:当参数包含--前缀、特殊符号组合时,PowerShell的参数绑定器可能会错误拦截参数,不会透传给目标exe。

解决方案

1. 优先清理输入字符

所有包含--前缀的参数手动输入,不要跨终端复制粘贴,如果是脚本中固定参数,直接在编辑器中手动输入所有参数内容,避免复制引入隐形字符。

2. 强制PowerShell透传所有参数

三种稳定的调用方式,可完全避免参数解析异常:

方式1:使用Start-Process显式传参

# 定义exe路径、参数数组
$oneCliPath = "f:\temp\onecli\onecli.exe"
$arguments = @(
    "config",
    "show",
    "SYSTEM_PROD_DATA",
    "--bmc",
    "USERID:ChangeME@192.168.1.100"
)
# 同步执行并输出结果,如需捕获日志可增加-RedirectStandardOutput参数指定输出文件
Start-Process -FilePath $oneCliPath -ArgumentList $arguments -Wait -NoNewWindow

方式2:使用--%停止解析符(适用于PowerShell 3.0及以上版本)

在exe路径后加--%,PowerShell会停止后续所有参数解析,直接原样透传给目标exe,和CMD的解析逻辑完全一致:

f:\temp\onecli\onecli.exe --% config show SYSTEM_PROD_DATA --bmc USERID:ChangeME@192.168.1.100

方式3:数组传参直接调用

将所有参数放入数组后直接调用exe,PowerShell会将数组元素按顺序透传为单独参数:

$params = @("config","show","SYSTEM_PROD_DATA","--bmc","USERID:ChangeME@192.168.1.100")
& f:\temp\onecli\onecli.exe $params

3. 隐形字符排查方法

如果怀疑参数有隐形字符,可以把复制的字符串转成ASCII码校验:

# 把需要校验的复制内容替换到引号内
[char[]]'--bmc' | ForEach-Object { [int]$_ }
# 正常输出应为 45,45,98,109,99,出现其他数值即为存在不可见字符

内容的提问来源于stack exchange,提问作者IonutN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:27:06