我正在编写一个 PowerShell 脚本,我需要在其中捕获它抛出的错误消息。注意:根据PowerShell,没有错误,命令执行成功。
例如:我试图从 SVN Link 下载一个包。链接实际上不存在。该脚本在控制台上向我显示错误消息。但是,当我尝试检查 $_
时或 $?
或 $error
,我没有看到任何错误信息。然而,$LASTEXITCODE
返回值 1. 我需要得到确切的错误信息。
最佳答案
如果收到错误消息,则需要捕获错误流:
$msg = command 2>&1
或者
command 2>error.txt
PowerShell 将其消息写入不同的流,这些流可以重定向到文件以捕获相应的输出。
要捕获文件中的特定流,您需要将流编号重定向到文件名。例如
command 2>"C:\path\to\error.log"
将捕获由
command
产生的所有错误消息在文件中 C:\path\to\error.log
.使用 2>>
而不是 2>
如果您想附加到文件而不是每次运行都覆盖它。您还可以将其他流与 STDOUT 结合以处理/重定向所有命令输出:
command >>"C:\path\to\all.log" *>&1
见
Get-Help about_Redirection
或 this Scripting Guy article有关流和重定向的更多信息。值得注意的事情:
*>
重定向是在 PowerShell v3 中引入的,因此它在 PowerShell v2 及更早版本中不起作用。 Write-Host
因为他们不明白 cmdlet 的用途。 关于powershell - 如何捕获命令抛出的错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420474/