如何强制Powershell在cmd中正常输出所有错误?

时间:2018-07-24 18:21:49

标签: powershell batch-file cmd

我希望能够使用Sysnative cmd执行Powershell脚本并将结果输出到日志中。

当我运行(System32)时:

C:\Windows\System32\cmd.exe /C "powershell -file “C:\…\ScriptWithErrors.ps1" >> C:\…\Log.log”

我的日志将显示powershell文件中的错误(通常在终端中以红色显示)

但是,当我运行(系统的)时:

C:\Windows\Sysnative\cmd.exe /C "powershell -file “C:\…\ScriptWithErrors.ps1" >> C:\…\Log.log”

我的日志不会显示任何我未明确使用Write-Host $_.Exception的powershell脚本错误。

是否可以执行Powershell脚本并强制输出错误输出?

此外,为什么使用cmd \C会使回波无法正常工作?

>> C:\Windows\Sysnative\cmd.exe /C "echo time \t”
>> time /t (Output)
>> 11:20 AM (Expected output)

1 个答案:

答案 0 :(得分:0)

Powershell将在$ Error变量中保存会话的所有错误。 最新的错误将是数组中的数字0。

因此,基本上要获取会话的所有错误,您可以最终将整个$ Error变量数组导出到日志中,或者逐一遍历并获取您感兴趣的部分。

要获取错误的行号,可以在错误变量上使用属性ScriptStackTrace。

例如,我运行:

Get-ChildItem -Path c:\cmder
Get-ChildItem -Path c:\nodirhere

第一行给我输出,第二行给我一个错误。 现在,通过选择数组中的位置0并询问我得到的scriptstacktrace,检查$ Error数组中的最新错误:

$Error[0].ScriptStackTrace
at <ScriptBlock>, <No file>: line 2