![PowerShell 复制项错误捕获](https://linux22.com/image/725368/PowerShell%20%E5%A4%8D%E5%88%B6%E9%A1%B9%E9%94%99%E8%AF%AF%E6%8D%95%E8%8E%B7.png)
如果失败,我该如何捕获错误并将其输出到 .txt 日志文件?
$ErrorActionPreference = 'stop'
#source1 file location
$source1 = "C:\users\me\desktop\test1"
#dest1 file location
$dest1 = "C:\users\me\desktop\final\"
#finds files in $source1 that are the very latest and copies to $dest1
Get-ChildItem $source1 -Recurse | Sort-Object -Property CreationTime -Descending | Select-Object -First 1 | Copy-Item -Destination $dest1 -ErrorAction 'Stop'
答案1
您可能希望使用 try catch 块来捕获错误。
使用 Try/Catch 时,重要的是要知道 Powershell 仅捕获终止错误,因此您将其设置-ErrorAction
为“停止”是正确的。
$ErrorActionPreference = 'stop'
当您已经告诉命令本身在发生错误时停止时,您不需要使用。
如果出现问题,这将以致命错误终止命令,然后触发您的 catch 语句。
如果触发了 catch,您可以在 catch 中编写任何您想要的代码,在下面的示例中,如果触发了错误,我们将获取当前错误对象,选择异常消息并将其输出到文件。
Exception 对象包含一些其他属性,您可以根据所需的信息来使用这些属性。
#source1 file location
$source1 = "C:\users\me\desktop\test1"
#dest1 file location
$dest1 = "C:\users\me\desktop\final\"
#finds files in $source1 that are the very latest and copies to $dest1
try {
Get-ChildItem $source1 -Recurse | Sort-Object -Property CreationTime -Descending | Select-Object -First 1 | Copy-Item -Destination $dest1 -ErrorAction 'Stop'
}
catch{
$_.Exception.Message | Out-File -FilePath .\errorlog.txt -Encoding utf8
}