LightningWar
LightningWar

Reputation: 975

Throw message not being shown

I'm trying to print my own error messages using throw. Consider this example:

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

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

If the user group is incorrect, this error message is shown:

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

Is there a way to show my throw message, rather than the generic exception?

Upvotes: 1

Views: 89

Answers (2)

Matt
Matt

Reputation: 46710

[adsi] has a habit of throwing terminating errors. This happens with Get-ADUser as well. This is why capturing the error in a try/catch (like in whatever's answer) is necessary.

As an alternative you can check if the group exists by querying all local groups first and see if yours exists.

$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."
}

or a variant

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

Depending on where you are continuing with this code it might be advantageous to store this information once.

Upvotes: 2

whatever
whatever

Reputation: 891

try this:

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

Upvotes: 2

Related Questions