下面是一个简单的
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
该错误是由
get-childitem
命令引发的。
将 -ErrorAction Stop 添加到此命令中,如下所示:
Get-ChildItem -Path $sourceDirectory -File -Filter "*.csv" -ErrorAction Stop | Copy-Item -Destination $destinationDirectory -ErrorAction Stop
对@guiwhatsthat 的答案的一些补充:
PowerShell 区分终止错误和非终止错误。在常见
ErrorAction
参数的帮助下,您可以设置 cmdlet 在发生此类错误时的行为。如果您想要更改脚本中多个 cmdlet 或部分的行为,您可以更改 $ErrorActionPreference
的值。
来自 PowerShell 文档:
$ErrorActionPreference
确定 PowerShell 如何响应命令行或脚本、cmdlet 或提供程序中的非终止错误(不会停止 cmdlet 处理的错误),例如 Write-Error cmdlet 生成的错误。
您还可以使用 cmdlet 的 ErrorAction 通用参数来覆盖特定命令的首选项。
有效值:
停止:显示错误信息并停止执行。
询问:显示错误信息并询问您是否要继续。
继续:显示错误消息并继续(默认)执行。
暂停:自动暂停工作流程作业以进行进一步调查。调查完毕后,工作流程即可恢复。
默默继续:没有效果。不显示错误消息并且继续执行而不会中断。