未指定powershell类别信息和换行符

未指定powershell类别信息和换行符,powershell,stderr,Powershell,Stderr,我有一个将文本打印到stderr的应用程序,所以要保存到文件中,我执行以下操作: \NGPQUERY.exe-spoof-stages-diag 2>c:\foo.txt 除了行末尾的crlf之外,所有文本都不是特殊字符 在DOS中,输出良好。 在powershell中,输出几乎正常 第一行文字如下: RTE Routings for BRI to LED - 00: 我在输出的顶部收到以下错误消息: NGPQUERY.exe:BRI至LED的RTE路线-00: 第1行字符:15 +\ngp

我有一个将文本打印到stderr的应用程序,所以要保存到文件中,我执行以下操作:

\NGPQUERY.exe-spoof-stages-diag 2>c:\foo.txt

除了行末尾的crlf之外,所有文本都不是特殊字符

在DOS中,输出良好。 在powershell中,输出几乎正常

第一行文字如下:

RTE Routings for BRI to LED - 00: 
我在输出的顶部收到以下错误消息:

NGPQUERY.exe:BRI至LED的RTE路线-00: 第1行字符:15
+\ngpquery.exe如果您只需要STDERR,这就足够了:

$oPsi = New-Object -TypeName System.Diagnostics.ProcessStartInfo

$oPsi.FileName = "NGPQUERY.exe"
$cArgs = @("-spoof", "-stages", "-diag")

$oPsi.Arguments = $cArgs
$oPsi.CreateNoWindow = $true
$oPsi.UseShellExecute = $false
$oPsi.RedirectStandardError = $true

$oProcess = New-Object -TypeName System.Diagnostics.Process
$oProcess.StartInfo = $oPsi
[Void]$oProcess.Start()
$sStdErr = $oProcess.StandardError.ReadToEnd()
[Void]$oProcess.WaitForExit()

$sStdErr | Out-File -Encoding "ASCII" -FilePath "C:\foo.txt"

这是一个老问题,但我之所以来到这里,是因为我遇到了一个类似的问题,并发现最简单的解决方案是调用cmd.exe并将命令括在引号中,以防止Powershell解释它。因此,在上述情况下,这将是:

cmd.exe /c ".\NGPQUERY.exe -spoof -stages -diag 2> c:\foo.txt"

尝试告诉powershell停止解析,然后像标准cmd提示符一样运行命令,如下所示:
\NGPQUERY.exe--%-spoof-stages-diag 2>c:\foo.txt
,看看这是否能提供更好的输出。您会在输出中收到错误消息,因为STDERR用于错误。换言之,这是PowerShell试图变得聪明。)使用
$ErrorActionPreference=“SilentlyContinue”
来抑制。@TMT我试过了,但似乎没有什么不同。有没有办法在一行中实现这一点?此外,应用程序会同步写入stdout和stderr,因此此解决方案将被阻止。如果我不抓取标准输出,它可能不会被阻止。在我看来,bash处理这个问题的能力要强得多。不确定哪一行,从未尝试过。有关异步版本,请参见我的答案: