在powershell中使用try.catch无法捕获错误



如果找不到DL,我正试图捕捉错误。我已经写了下面的代码

try
{
Get-DistributionGroup -Identity "#AB-TestDL"|select ManagedBy -ErrorAction Stop
}
catch
{
if($Error[0] -match "couldn't be found on")
{
Write-Host "DL not found"
}
}

但当我运行代码时,它会抛出一个错误:#AB TestDL";在上找不到。。。请帮助我捕获此错误。谢谢

尝试在Get-DistributionGroup -Identity "#AB-TestDL"CmdLet上使用-ErrorAction Stop参数,而不是Select-Object

Select-Object可以用于创建新对象,但当属性不存在时,这对CmdLet来说不是错误。

C:> [PSCustomObject]@{ Test = 123 } | Select Test2 -ErrorAction Stop
Test2
-----

然而,您可以使其工作方式不同(而我仍然建议将-ErrorAction Stop移动到第一个CmdLet(:

Set-StrictMode -Version 3
$Object = [PSCustomObject] @{
Test = 123
}
try {
$null = $Object.Test2
} catch {
throw "I don't extist and catch because of strictmode version 3"
}

只是我脑海中浮现的一个想法。事实上,我从来没有这样使用严格模式。

最新更新