为什么我的 try catch 错误即使在 -ErrorAction Stop 开启的情况下仍然成功传递? [重复]

问题描述 投票:0回答:2

下面是一个简单的

Try Catch
,但是当我测试它时,成功后它似乎会归档,因此我在变量中包含了一个不存在的位置来测试失败,但奇怪的是,即使失败出现在 ISE 窗口中仍然显示为成功,但下面的某些内容不太正确,任何想法都让我迷失在错误的地方。

## The location/filename where the Logs will be stored
$varfullpath = "I:\Dev\BI\Reference Data\Release_Event_log.txt"       
## The location/filename of the Source to copy from                                    
$sourceDirectory  = "C:\Users\Simon.Evans\Documents\Source Data\kljhkjlOS\"
## The location/filename of the Destination to copy to  
$destinationDirectory = "I:\Dev\BI\Projects\Powershell\Test Area\Source Data\OkjhkhDS\"
$Server = "CHH-BITEST"
$CurrentDate = Get-Date
try{
    Get-ChildItem -Path $sourceDirectory -File -Filter "*.csv" | Copy-Item -Destination $destinationDirectory -ErrorAction Stop
    Write-Log -Message "Copy from $sourceDirectory to $destinationDirectory suceeded"  -path $varfullpath             
}
catch{
    $Error[0] | Write-Log -path $varfullpath                                                                            
    Write-log -Message "Copy from $sourceDirectory to $destinationDirectory Failed"  -Level Error -path $varfullpath     
} 

Start-Process notepad $varfullpath  ## Opens the file immediately for review
powershell try-catch
2个回答
2
投票

该错误是由

get-childitem
命令引发的。

将 -ErrorAction Stop 添加到此命令中,如下所示:

Get-ChildItem -Path $sourceDirectory -File -Filter "*.csv" -ErrorAction Stop | Copy-Item -Destination $destinationDirectory -ErrorAction Stop


2
投票

对@guiwhatsthat 的答案的一些补充:

PowerShell 区分终止错误和非终止错误。在常见

ErrorAction
参数的帮助下,您可以设置 cmdlet 在发生此类错误时的行为。如果您想要更改脚本中多个 cmdlet 或部分的行为,您可以更改
$ErrorActionPreference
的值。

来自 PowerShell 文档

$ErrorActionPreference

确定 PowerShell 如何响应命令行或脚本、cmdlet 或提供程序中的非终止错误(不会停止 cmdlet 处理的错误),例如 Write-Error cmdlet 生成的错误。

您还可以使用 cmdlet 的 ErrorAction 通用参数来覆盖特定命令的首选项。

有效值:

停止:显示错误信息并停止执行。

询问:显示错误信息并询问您是否要继续。

继续:显示错误消息并继续(默认)执行。

暂停:自动暂停工作流程作业以进行进一步调查。调查完毕后,工作流程即可恢复。

默默继续:没有效果。不显示错误消息并且继续执行而不会中断。

© www.soinside.com 2019 - 2024. All rights reserved.