我尝试使用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
消息,而不是通用异常?
答案 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."
}
根据您继续使用此代码的位置,将此信息存储一次可能是有利的。