CodeSpent
CodeSpent

Reputation: 1904

Try/Catch Example

I understand Stackoverflow isn't a write your code for you forum, absolutely, but I'm finding it very difficult to find a good example of try/catch proper usage in Powershell. I have read up on fundamentals, and understand the theoretical concept, but execution I'm struggling with.

Here is a simple script that queries Active Directory:

do {
    clear
    Import-Module active*

    "============ WhoIs Lookup ============="
    Write-Host ""
    $who = Read-Host "WhoIs";


    $req = Get-ADUser -Identity $who 


    Write-Host ''
    Write-Host "$who is " -NoNewline
    Write-Host $req.Name -ForegroundColor Cyan
    pause
    } while ($run =1)

An example error is:

Get-ADUser : Cannot find an object with
identity: '5621521' under: 'DC=dcsg,DC=com'.
At C:\Tools\CSOCTools\Who_Is\whoIs.ps1:10
char:12
+     $req = Get-ADUser -Identity $who
+            ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFoun
   d: (5621521:ADUser) [Get-ADUser], ADIde
  ntityNotFoundException
    + FullyQualifiedErrorId : ActiveDirecto
   ryCmdlet:Microsoft.ActiveDirectory.Mana
  gement.ADIdentityNotFoundException,Micr
 osoft.ActiveDirectory.Management.Comman
ds.GetADUser

How would I catch this User Not Found error?

Upvotes: 0

Views: 589

Answers (2)

Akaino
Akaino

Reputation: 1025

Simple example:

try {
  Get-ADUser -Identity “bleh”
}
catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
{
  Write-Warning “AD computer object not found”
}

For your case:

do {
  clear
  Import-Module active*

  "============ WhoIs Lookup ============="
  Write-Host ""
  $who = Read-Host "WhoIs";

  try {
    $req = Get-ADUser -Identity $who 
  } 
  catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
  {
    Write-Warning “AD user object not found”
    Write-Host ''
    Write-Host "$who is " -NoNewline
    Write-Host $req.Name -ForegroundColor Cyan
  }
  pause
} while ($run =1)

Edit: I put the Write-Host into the catch as you're eventually trying to reference to NULL when there's no object.

Upvotes: 2

cet51
cet51

Reputation: 1226

I got a very good example from here. For the exception types after the Catch (where I have two of them) I just grabbed them straight from the error message you provided. I haven't tried this out many times in my experience, let me know if it works for ya!

Try 
{
    do {
        clear
        Import-Module active*

        "============ WhoIs Lookup ============="
        Write-Host ""
        $who = Read-Host "WhoIs";


        $req = Get-ADUser -Identity $who 


        Write-Host ''
        Write-Host "$who is " -NoNewline
        Write-Host $req.Name -ForegroundColor Cyan
        pause
    } while ($run =1)
}
Catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException],[Microsoft.ActiveDirectory.Management.Commands.GetADUser]
{
     # Error message here
}

Upvotes: 1

Related Questions