PowerShell 复制项错误捕获

PowerShell 复制项错误捕获

如果失败,我该如何捕获错误并将其输出到 .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
}

相关内容