如何将PowerShell的InvalidArgument错误输出重定向到文件?
解决PowerShell参数绑定错误无法重定向的问题
问题原因
你遇到的NamedParameterNotFound错误属于PowerShell参数解析阶段的错误——在命令实际执行前,PowerShell引擎就检测到了无效参数-PrefixLengh(正确拼写是-PrefixLength),这类错误不会进入常规的标准错误流(stderr),所以普通的2>&1、*>等重定向方式无法捕获。
解决方案
方法1:用脚本块包裹命令
将错误命令放在脚本块中执行,让解析器在子作用域中处理错误,此时错误会进入可捕获的流:
& { New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 172.1.2.3 -PrefixLengh 27 } *> error.log
或者使用Invoke-Command:
Invoke-Command -ScriptBlock { New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 172.1.2.3 -PrefixLengh 27 } *> error.log
方法2:通过Start-Process启动新PowerShell进程
让PowerShell作为独立进程执行命令,此时解析错误会被标准错误流捕获:
# 将错误单独写入文件 Start-Process powershell.exe -ArgumentList "-Command","New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 172.1.2.3 -PrefixLengh 27" -RedirectStandardError error.log -NoNewWindow # 合并标准输出和错误到同一文件 Start-Process powershell.exe -ArgumentList "-Command","New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 172.1.2.3 -PrefixLengh 27 2>&1" -RedirectStandardOutput error.log -NoNewWindow
额外提示
顺便纠正参数拼写错误:正确参数名是-PrefixLength(末尾多一个t),修正后命令本身就能正常执行,也就不会产生错误了:
New-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 172.1.2.3 -PrefixLength 27
内容的提问来源于stack exchange,提问作者Zulakis
相关产品推荐
相关产品推荐

