Question about error handling in script

Tagged: 

This topic contains 4 replies, has 3 voices, and was last updated by Profile photo of Глеб Боушев Глеб Боушев 5 months, 4 weeks ago.

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #37234

    I have made a script that can be used for granting permission to mailboxes. I am not satisfied with how I have delt with error handling in case people enter names for mailboxes or names for security groups. It prompts you if you have a typo once but if you write another typo the script just continues. How can I make this better?


    $postboks = Read-Host "Skriv inn navnet på postboksen hvis egenskaper skal endres"
    $postboks = $postboks.Trim()
     
    #Dette sjekker om postboksen finnes
    try {
        (Get-Mailbox -identity $postboks)
    }
     
    catch {
        write-host "Postboksen '$postboks' finnes ikke. Vennligst skriv inn riktig navn."
        $postboks = Read-Host "Skriv inn navnet på postboksen hvis egenskaper skal endres"
        $postboks = $postboks.Trim()
    }
     
    $sikkerhetsgruppe = Read-Host "`nSkriv inn navn på sikkerhetsgruppen som skal ha rettigheten"
    $sikkerhetsgruppe = $sikkerhetsgruppe.Trim()
     
    #Dette sjekker om sikkerhetsgruppen finnes
    try {
        (Get-Group -identity $sikkerhetsgruppe)
    }
     
    catch {
        Write-Host "Sikkerhetsgruppen '$sikkerhetsgruppe' finnes ikke. Vennligst skriv inn riktig navn."
        $sikkerhetsgruppe = Read-Host "Skriv inn navn på sikkerhetsgruppen som skal ha rettigheten"
        $sikkerhetsgruppe = $sikkerhetsgruppe.Trim()
    }
     
    #Dette spør om man skal gi rettigheter til å sende som en postboks/bruker
    try {
        [ValidateSet('Ja','Nei')]$SendAs = Read-Host "`n Vil du at '$sikkerhetsgruppe' skal ha rettigheter for å sende e-post som '$postboks' (Ja/Nei)?"
    }
     
    catch {
        write-host "Feilmelding: Du må skrive 'Ja' eller 'Nei'" -foregroundcolor "red"
    }

    if ($SendAs -eq 'Ja') {
        Write-Host "'$sikkerhetsgruppe' gis nå tilgang til å sende e-post på vegne av postboksen '$postboks'."
        Set-Mailbox gert.mailbox -GrantSendOnBehalfTo $sikkerhetsgruppe
    }
     
    #Dette spør om man skal gi rettigheter til å sende på vegne av en postboks/bruker
    try {
        [ValidateSet('Ja','Nei')]$BehalfOf = Read-Host "`n Vil du at '$sikkerhetsgruppe' skal ha rettigheter for å sende e-post på vegne av '$postboks' (Ja/Nei)?"
    }
     
    catch {
        write-host "Feilmelding: Du må skrive 'Ja' eller 'Nei'" -foregroundcolor "red"
    }

    if ($BehalfOf -eq 'Ja') {
        Write-Host "'$sikkerhetsgruppe' gis nå tilgang til å sende e-post som postboksen '$postboks'"
        Get-Mailbox $postboks | Add-ADPermission -User $sikkerhetsgruppe -ExtendedRights "Send As"
    }

    # Dette spør om man vil gi fulle tilganger til en postboks/bruker
    try {
        [ValidateSet('Ja','Nei')]$FullAccess = Read-Host "`n Vil du at '$sikkerhetsgruppe' skal ha fulle rettigheter til postboksen '$postboks' (Ja/Nei)?"
    }
     
    catch {
        write-host "Feilmelding: Du må skrive 'Ja' eller 'Nei'" -foregroundcolor "red"
    }

    if ($FullAccess -eq 'Ja') {
        Write-Host "'$sikkerhetsgruppe' gis nå fulle tilganger til postboksen '$postboks'."
        Add-MailboxPermission -Identity $postboks -User $sikkerhetsgruppe -AccessRights Fullaccess -InheritanceType all
    }

    #37235

    I suppose you could use a lot of different options to achieve what you need...
    Maybe something like this could work for you

    while $mailboxerror {
    get user input
    $mailboxerror = $false
    try { get mailbox from user input here }
    catch { if errors out set $mailboxerror to $true }
    }
    #37237
    Profile photo of Hermann Lüpfert
    Hermann Lüpfert
    Participant

    Hei,

    there is a nice chapter on Error-Handling in the book

    Learn PowerShell Toolmaking in a Month of Lunches
    by Don Jones and Jeffery D. Hicks
    https://www.manning.com/books/learn-powershell-toolmaking-in-a-month-of-lunches

    Kan anbefales.

    Have mercy with the puppies.

    Vennlig hilsen.

    #37248

    Thanks for replies. This did what I was looking for.

    $postboksfeil = $false
    
    #Dette sjekker om postboksen finnes
    while ($postboksfeil -eq $false) {
        $postboks = Read-Host "Skriv inn navnet på postboksen hvis egenskaper skal endres"
    
        try { 
            (Get-Mailbox -identity $postboks -ErrorAction stop | Out-Null) 
            $postboksfeil = $true
            Write-Host "Dette fungerte"
        }
        catch { 
            write-host "`nPostboksen '$postboks' finnes ikke. Vennligst skriv inn riktig navn.`n" -foregroundcolor "red"
            #$postboksfeil = $false
        }
    }
    
    #37249

    glad I could help!

Viewing 5 posts - 1 through 5 (of 5 total)

You must be logged in to reply to this topic.