Lukikum 8 Geschrieben 5. Dezember 2022 Melden Geschrieben 5. Dezember 2022 Moin zusammen, ich wollte ein kleines Skript basteln, um einmal im Monat die Standardberechtigung von jedem User anzupassen. Da wir aber Englische und Deutsche Clients haben, sind die Foldernames, wo man die Berechtigungen anpasst auch unterschiedlich. Ich wollte es mir einfach machen und einen Try Catch einbauen, um beide Varianten abzudecken: --------------------------------- $Mailboxes = (Get-Mailbox -RecipientTypeDetails "usermailbox" -ResultSize unlimited ).alias foreach ($Mailbox in $Mailboxes){ try {Set-MailboxFolderPermission ${Mailbox}:\Kalender -User Default -Accessrights AvailabilityOnly} catch {Set-MailboxFolderPermission ${Mailbox}:\Calendar -User Default -Accessrights AvailabilityOnly} } --------------------------------- Hat das schon mal jemand in die Richtung probiert ? Bei mir wird Try Catch komplett ignoriert, der Rest funktioniert. Bin leider auch noch etwas der Powershell Noob, so dass ich beim googeln den Fehler nicht nachvollziehen konnte.. LG Lukas Zitieren
Sunny61 828 Geschrieben 5. Dezember 2022 Melden Geschrieben 5. Dezember 2022 (bearbeitet) Ohne es probiert zu haben, pack einfach mal alles in den Try Catch Block. Welche Fehlermeldung gibt es denn, wenn Du auf einem Englischen Client Kalender ansprichst? Nimm die Fehlermeldung in den Catch Teil mit auf, jetzt wird der Catch Teil immer aufgerufen wenn es einen Fehler gibt. try $Mailboxes = (Get-Mailbox -RecipientTypeDetails "usermailbox" -ResultSize unlimited ).alias foreach ($Mailbox in $Mailboxes){ {Set-MailboxFolderPermission ${Mailbox}:\Kalender -User Default -Accessrights AvailabilityOnly} catch # Wenn der Fehler wegen Kalender auftritt, führe das aus: {Set-MailboxFolderPermission ${Mailbox}:\Calendar -User Default -Accessrights AvailabilityOnly} } Schau doch hier mal rein: https://www.windowspro.de/script/fehlerbehandlung-powershell-erroraction-try-catch-finally Ab hier lesen: Terminierende Fehler abfangen mit try/catch EDIT: Hier noch ein Artikel von MSFT dazu: https://learn.microsoft.com/de-de/powershell/scripting/learn/deep-dives/everything-about-exceptions?view=powershell-7.3 bearbeitet 5. Dezember 2022 von Sunny61 Zitieren
Beste Lösung cj_berlin 1.443 Geschrieben 5. Dezember 2022 Beste Lösung Melden Geschrieben 5. Dezember 2022 Genau, "terminierende Fehler" sind hier das Stichwort. Einfach -ErrorAction Stop zu den Cmdlets hinzufügen, und schon sind alle Fehler terminierend. Aber noch besser ist es, die Fehler gar nicht erst entstehen zu lassen: https://it-pro-berlin.de/2016/05/powershell-hack-namen-von-standardordnern-in-einem-exchange-postfach/ Ich könnte schwören, ich habe es bereits als Antwort auf Deinen anderen Thread gepostet. Zitieren
Lukikum 8 Geschrieben 5. Dezember 2022 Autor Melden Geschrieben 5. Dezember 2022 (bearbeitet) Am 5.12.2022 um 11:18 schrieb Sunny61: pack einfach mal alles in den Try Catch Block Mehr Hallo Sunny, das hat leider nicht funktioniert. Am 5.12.2022 um 11:57 schrieb cj_berlin: Einfach -ErrorAction Stop zu den Cmdlets hinzufügen Mehr das funktioniert, ich verstehe jetzt wo der Fehler war. Evtl hätte dann auch ein "trap" funktioniert. Danke !! Edit: Es hat doch nicht funktioniert, weil er nach einem try auf dem catch command hängen geblieben ist. Ich habe es dann mit der $calendar_folder Variable von CJ probiert. Funktioniert ohne Error und sieht auch viel hübscher aus Am 5.12.2022 um 11:57 schrieb cj_berlin: Ich könnte schwören, ich habe es bereits als Antwort auf Deinen anderen Thread gepostet. Mehr Ich habe gerade mal nachgeschaut, ich glaube du verwechselt mich mit jemandem :P LG Lukas bearbeitet 5. Dezember 2022 von Lukikum Zitieren
Sunny61 828 Geschrieben 5. Dezember 2022 Melden Geschrieben 5. Dezember 2022 Am 5.12.2022 um 11:57 schrieb cj_berlin: Ich könnte schwören, ich habe es bereits als Antwort auf Deinen anderen Thread gepostet. Mehr Jetzt wo du es schreibst, meine ich mich zu erinnern dass du es erst kürzlich gepostet hast. ;) Zitieren
cj_berlin 1.443 Geschrieben 5. Dezember 2022 Melden Geschrieben 5. Dezember 2022 Am 5.12.2022 um 12:44 schrieb Lukikum: Ich habe gerade mal nachgeschaut, ich glaube du verwechselt mich mit jemandem :P Mehr Stimmt, das war ein anderer User. Dennoch solltest Du es so machen und nicht darauf vertrauen, dass nur DE und EN bei euch vorkommen. Zitieren
massaraksch 41 Geschrieben 5. Dezember 2022 Melden Geschrieben 5. Dezember 2022 (bearbeitet) Hi, nochmal eine Erläuterung: Wenn man -ErrorAction Stop verwendet (verwenden muss, wegen try-catch), dann fliegt man beim ersten Auftreten eines Fehlers aus der umgebenden foreach-Schleife raus. Ende Gelände. Das vermeidet man, indem man den catch-Block mit "continue" abschließt. Das führt zur Weiterverarbeitung der Schleife mit dem nächsten Item. Also ungefähr so: foreach ($Mailbox in $Mailboxes) { try {Set-MailboxFolderPermission ... -ea Stop} catch { Set-MailboxFolderPermission ... continue } } bearbeitet 5. Dezember 2022 von massaraksch Zitieren
BOfH_666 586 Geschrieben 5. Dezember 2022 Melden Geschrieben 5. Dezember 2022 Am 5.12.2022 um 16:46 schrieb massaraksch: dann fliegt man beim ersten Auftreten eines Fehlers aus der umgebenden foreach-Schleife raus. Ende Gelände. Mehr Das wär mir neu. Versuch mal Folgendes in einem beliebigen Verzeichnis: Get-ChildItem | ForEach-Object { try { Get-ItemProperty -Path 'bla keks' -ErrorAction stop } catch { 'bla keks' } } Du wirst so viele "Blakekse" sehen, wie es Dateien und Ordner in diesem Verzeichnis gibt. Zitieren
cj_berlin 1.443 Geschrieben 5. Dezember 2022 Melden Geschrieben 5. Dezember 2022 (bearbeitet) Am 5.12.2022 um 16:46 schrieb massaraksch: Hi, nochmal eine Erläuterung: Wenn man -ErrorAction Stop verwendet (verwenden muss, wegen try-catch), dann fliegt man beim ersten Auftreten eines Fehlers aus der umgebenden foreach-Schleife raus. Ende Gelände. Das vermeidet man, indem man den catch-Block mit "continue" abschließt. Das führt zur Weiterverarbeitung der Schleife mit dem nächsten Item. Also ungefähr so: foreach ($Mailbox in $Mailboxes) { try {Set-MailboxFolderPermission ... -ea Stop} catch { Set-MailboxFolderPermission ... continue } } Mehr Moin, Du verwechselst hier was. Das, was Du beschreibst, passiert bei Trap, und "continue" braucht man dort, um die Ausgabe der Fehlermeldung zu unterdrücken. Try/catch behandelt alles lokal, und "continue" führt dazu, dass der restliche Codeblock innerhalb der Schleife für diese Iteration übersprungen wird. bearbeitet 5. Dezember 2022 von cj_berlin 1 Zitieren
massaraksch 41 Geschrieben 6. Dezember 2022 Melden Geschrieben 6. Dezember 2022 Ja, da hab ich wohl was verwechselt. Danke für die Korrekturen. Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.