抛出消息未显示

时间:2017-10-25 11:17:20

标签: powershell error-handling adsi

我尝试使用throw打印自己的错误消息。考虑这个例子:

$computerName = $env:COMPUTERNAME
$adsi = [adsi]("WinNT://$computerName")

if (!($adsi.Children.Find($userGroup, 'group')))
{ 
    throw "User group not found."
}

如果用户组不正确,则会显示以下错误消息:

Exception calling "Find" with "2" argument(s): The group name could not be found.

有没有办法显示我的throw消息,而不是通用异常?

2 个答案:

答案 0 :(得分:2)

试试这个:

$computerName = $env:COMPUTERNAME
$adsi = [adsi]("WinNT://$computerName")
try {
    $adsi.Children.Find($userGroup, 'group')
}
catch{ 
    throw "User group not found."
}

答案 1 :(得分:2)

[adsi]有抛弃终止错误的习惯。这也发生在Get-ADUser上。这就是为什么必须在try / catch(如whatever's answer中)捕获错误的原因。

作为替代方法,您可以先查询所有本地组并查看是否存在,检查该组是否存在。

$computerName = $env:COMPUTERNAME
$adsi = [adsi]("WinNT://$computerName")
$localGroups = $adsi.children | Where-Object{$_.SchemaClassName -eq "Group"}
If($userGroup -notin $localGroups.Name){
    throw "Your group is in another castle."
}

或变体

if(-not ($adsi.children | Where-Object{$_.SchemaClassName -eq "Group" -and $_.Name -eq $userGroup})){
    throw "Your group is in another castle."
}

根据您继续使用此代码的位置,将此信息存储一次可能是有利的。