$LASTEXITCODE 严格用于命令行程序返回其状态。PS 中内置的 Cmdlet,例如 Remove-item,最多以 3 种方式返回错误。对于警告,他们将消息(或其他 .NET 对象)写入“警告流”。在 PSv3 中,有一种直接的方法可以将该流重定向到一个文件:cmdlet blah blah blah 3>warning.out
. 第二个是通过错误流。该流也可以被重定向... 2>error.out
,或者更典型的错误是使用 try/catch 或 trap 捕获,或者使用 -ErrorVariable 参数写入变量(请参阅 参考资料help about_commonparameters
)。第三种方法是“抛出”错误。除非被捕获(try/catch 或陷阱),否则抛出的错误将导致脚本终止。抛出的错误通常是 .NET 类的子类system.Management.Automation.ErrorRecord
. ErrorRecord 提供了比返回码更多的错误信息。
如果 remove-item 由于文件未找到错误而失败,它会将 a 写入System.Management.Automation.ItemNotFoundException
错误流。使用 try/catch,您可以从 remove-item 过滤该特定错误或其他特定错误。如果您只是从命令行输入 PS 命令,您可以输入$error[0]|select-object *
以获取有关最后一个错误的大量信息。
你可以这样做:
try {
Remove-Item -Recurse -Force C:\users\bkp 2>&1
} catch {
# oops remove-item failed. Write warning then quit
# replace the following with what you want to do
write-warning "Remove-item encounter error: $_"
return # script failed
}