none
Try'N Catch fängt Fehler nicht ab RRS feed

  • Frage

  • Guten Tag

    Infos zu mir:

    • - Windows 7 Ultimate VM
    • - Powershell 2.0
    • -Exchange 2010 Commands installiert
    • -QuestAD Snap-In Installiert
    • Scripting mit Primal Forms 2011

    Mein Problem:

    Ich versuche eine neue SMTP adresse einem User hinzuzfügen.

    try{
    	if($LogonName.Substring(0,2) -eq 'ea'){
    		Set-MailContact -Identity $LogonName -EmailAddresses $Addresses -DomainController $GlobalDC
    	}
    	else{
    		Set-Mailbox -Identity $LogonName -EmailAddresses $Addresses -EmailAddressPolicyEnabled $false -DomainController $GlobalDC
    	}
    }
    catch{
    	$Msgbox = New-Object -ComObject wscript.shell
    	$MsgboxShow = $Msgbox.popup("Fehler Beim hinzufügen der Adresse!",0,"[ ERROR ]",0)	
    }

    Jedoch beim hinzufügen einer bereits bei einem anderem User verwendete SMTP Adresse, gibt er zwar eine Fehlemeldung aus, jedoch wird diese durch das Try'n'Catch nicht abgefangen. Hier die Fehlermeldung:

    ERROR: Set-Mailbox : The proxy address "smtp:HH.Scripting@XZY.ch" is already being used by "[OU Pfad]". Please ch
    ERROR: oose another proxy address.
    SMTP_Manager.pff (133): ERROR: At Line: 133 char: 17
    ERROR: +                         Set-Mailbox <<<<  -Identity $LogonName -EmailAddresses $Addresses -EmailAddressPolicyEnabled $false -DomainController $GlobalDC
    ERROR:     + CategoryInfo          : NotSpecified: ([domain]/ENTERPRI...RS/Shell, Power:ADObjectId) [Set-Mailbox], ProxyAddressExistsException
    ERROR:     + FullyQualifiedErrorId : D6D4B491,Microsoft.Exchange.Management.RecipientTasks.SetMailbox
    ERROR:

    Warum wird diese nicht abgefangen?

    Vielen Dank

    HH.Scripting


    [ Im swiss. I'm sorry for my bad english writing ]

    • Typ geändert HH.Scripting Dienstag, 7. Februar 2012 12:22
    Dienstag, 7. Februar 2012 12:20

Antworten

  • Versuch mal -erroraction stop

    try{
    	if($LogonName.Substring(0,2) -eq 'ea'){
    		Set-MailContact -Identity $LogonName -EmailAddresses $Addresses -DomainController $GlobalDC -ErrorAction Stop  
    
    	}
    	else{
    		Set-Mailbox -Identity $LogonName -EmailAddresses $Addresses -EmailAddressPolicyEnabled $false -DomainController $GlobalDC -ErrorAction Stop
    	}
    }
    catch{
    	$Msgbox = New-Object -ComObject wscript.shell
    	$MsgboxShow = $Msgbox.popup("Fehler Beim hinzufügen der Adresse!",0,"[ ERROR ]",0)	
    }

    Gibt es da noch eine bessere Doku? als:
    http://help.outlook.com/de-de/140/dd575549.aspx


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info

    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace" "


    Dienstag, 7. Februar 2012 12:29

Alle Antworten

  • Versuch mal -erroraction stop

    try{
    	if($LogonName.Substring(0,2) -eq 'ea'){
    		Set-MailContact -Identity $LogonName -EmailAddresses $Addresses -DomainController $GlobalDC -ErrorAction Stop  
    
    	}
    	else{
    		Set-Mailbox -Identity $LogonName -EmailAddresses $Addresses -EmailAddressPolicyEnabled $false -DomainController $GlobalDC -ErrorAction Stop
    	}
    }
    catch{
    	$Msgbox = New-Object -ComObject wscript.shell
    	$MsgboxShow = $Msgbox.popup("Fehler Beim hinzufügen der Adresse!",0,"[ ERROR ]",0)	
    }

    Gibt es da noch eine bessere Doku? als:
    http://help.outlook.com/de-de/140/dd575549.aspx


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info

    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace" "


    Dienstag, 7. Februar 2012 12:29
  • Hallo Peter

    Hat funktionier!

    Vielen Dank!

    Jedoch würde mich doch noch wundern, warum er es nicht als Error erkennt und abfängt.

    Gruss

    HH.Scripting


    [ Im swiss. I'm sorry for my bad english writing ]

    Dienstag, 7. Februar 2012 12:55
  • Das ist sogar Absicht !

    PowerShell ist auf robustheit Programmiert. Auch bei Fehlern soll das Script weiterlaufen.
    Deshalb sind Fehler erstmal nicht kritisch!
    Trap und Catch fangen aber nur kritische Fehler ab!
    Deshalb musst du durch -EA Stop den Fehler als Kritisch definieren.

    Man kann das auch global für ein gesammtes Script einstellen!

    $ErrorActionPreference = Stop
    

    Siehe:

    Get-help about_Preference_Variables
    Get-help about_Trap


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info

    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace" "

    Dienstag, 7. Februar 2012 13:06
  • >Deshalb sind Fehler erstmal nicht kritisch!

    Kleine Ergänzung/Korrektur: Powershell unterscheidet zwischen abbrechenden (terminating) und nicht-abbrechenden (non-terminating) Fehlern. Ersteres sind, wie der Name schon sagt, Fehler die ein Skript beenden würden. Nur diese werden von Try/Catch abgefangen. Dein Fehler oben ist ein Nichtabbrechender.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 7. Februar 2012 13:29
    Moderator
  • Danke für die Begriffskorrektur!

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info

    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace" "

    Dienstag, 7. Februar 2012 13:52
  • Es ging nicht um den Begriff (so kleinlich bin ich ja nun auch nicht ;) ), sondern darum das man dich so verstehen konnte, das bei Powershell alle Fehler erst mal nicht kritisch (abbrechend) sind ("Deshalb sind Fehler erstmal nicht kritisch!").

    Das wäre nämlich falsch. Es gibt einfach zwei unterschiedliche Fehlertypen. Manche sind kritisch/abrechend und manche nicht. Die Nicht-Abbrechenden kann man aber -wie du richtig erwähntest-, zu Abrechenden machen und dann entsprechend abfangen/behandeln.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Dienstag, 7. Februar 2012 13:59
    Moderator
  • Viele Dank für de ausführliche Erklärung!

    Gruss

    HH.Scripting


    [ Im swiss. I'm sorry for my bad english writing ]

    Dienstag, 7. Februar 2012 14:34