Search code examples
powershellpowershell-3.0

How can I turn this exceptional error message into my custom message in PowerShell?


I am writing the script which should validate the user in the active directory and gets some AD information. I am struggling with the error handling in this script:

$user = (Read-Host -Prompt 'Enter your network id').ToUpper()
#check if the user exists in the AD database
$userid= Get-ADUser $user | Select SamAccountName
$userid = $user

 if (($user -match $userid))  {

 Write-Host $user "exists in AD"
 }else{
 write-host "user cannot be found"
 }

If someone who uses the script will put incorrect userId (which doesn't exist in AD), the script will throw an error message :

Get-ADUser : Cannot find an object with identity: 'DUMMY' under: 'DC=company,DC=com'.
At line:9 char:11
+ $memoid = Get-ADUser $user | Select SamAccountName
+           ~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (DUMMY:ADUser) [Get-ADUser], ADIdentityNotF 
   oundException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management. 
   ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.GetADUser
 

Even though incorrect userID was entered, I receive

= DUMMY exists in AD

How can I turn this exceptional error message into my custom message - "The user doesn't exist in AD"? Thank you in advance


Solution

  • For this, it is better not to use the -Identity parameter (which you imply in your code by using Get-ADUser $user)

    Try

    $userID = Read-Host -Prompt 'Enter your network id'
    
    # check if the user exists in the AD database
    # this will either return an ADUser object or $null
    $user = Get-ADUser -Filter "SamAccountName -eq '$userID'" -ErrorAction SilentlyContinue
    
    if ($user) {
        Write-Host "$($user.SamAccountName) exists in AD" -ForegroundColor Green
    }
    else{
        Write-Host "user $($user.SamAccountName) cannot be found" -ForegroundColor Red
    }