0

我正在尝试制作一个陷阱命令来捕获找不到文件的异常。这是代码:

Trap {
  Clear-Host
  Write-Host "The file you are looking for does not exist"
}

Get-ItemProperty C:\fake

我是否误解了如何做到这一点?

4

1 回答 1

4

陷阱仅在终止错误(停止管道的错误)时执行,因此首先您需要更改有问题的 cmdlet 的 ErrorAction 行为:

Trap {
  Clear-Host
  Write-Host "The file you are looking for does not exist"
}

Get-ItemProperty C:\fake -ErrorAction Stop

要抑制错误记录随后冒泡到调用者,请从陷阱内部从当前范围返回:

Trap {
  Clear-Host
  Write-Host "The file you are looking for does not exist"
  return
}

Get-ItemProperty C:\fake -ErrorAction Stop

为了不必一直-ErrorAction Stop明确指定参数参数,$ErrorActionPreference请在脚本/函数的开头设置变量:

$ErrorActionPreference = 'Stop'

或使用$PSDefaultParameterValues哈希表为特定的 cmdlet 设置它:

$PSDefaultParameterValues['Get-ItemProperty:ErrorAction'] = 'Stop'
$PSDefaultParameterValues['Do-OtherStuff:ErrorAction'] = 'Stop'
$PSDefaultParameterValues['Set-*:ErrorAction'] = 'Stop'
于 2016-12-12T01:12:31.760 回答