Lukikum 8 Geschrieben 5. Dezember 2022 Melden Teilen 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 Link zu diesem Kommentar
Sunny61 806 Geschrieben 5. Dezember 2022 Melden Teilen 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 Link zu diesem Kommentar
Beste Lösung cj_berlin 1.315 Geschrieben 5. Dezember 2022 Beste Lösung Melden Teilen 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 Link zu diesem Kommentar
Lukikum 8 Geschrieben 5. Dezember 2022 Autor Melden Teilen Geschrieben 5. Dezember 2022 (bearbeitet) vor 2 Stunden schrieb Sunny61: pack einfach mal alles in den Try Catch Block Hallo Sunny, das hat leider nicht funktioniert. vor einer Stunde schrieb cj_berlin: Einfach -ErrorAction Stop zu den Cmdlets hinzufügen 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 vor einer Stunde schrieb cj_berlin: Ich könnte schwören, ich habe es bereits als Antwort auf Deinen anderen Thread gepostet. Ich habe gerade mal nachgeschaut, ich glaube du verwechselt mich mit jemandem :P LG Lukas bearbeitet 5. Dezember 2022 von Lukikum Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 5. Dezember 2022 Melden Teilen Geschrieben 5. Dezember 2022 vor einer Stunde schrieb cj_berlin: Ich könnte schwören, ich habe es bereits als Antwort auf Deinen anderen Thread gepostet. Jetzt wo du es schreibst, meine ich mich zu erinnern dass du es erst kürzlich gepostet hast. ;) Zitieren Link zu diesem Kommentar
cj_berlin 1.315 Geschrieben 5. Dezember 2022 Melden Teilen Geschrieben 5. Dezember 2022 vor 2 Stunden schrieb Lukikum: Ich habe gerade mal nachgeschaut, ich glaube du verwechselt mich mit jemandem :P 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 Link zu diesem Kommentar
massaraksch 41 Geschrieben 5. Dezember 2022 Melden Teilen 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 Link zu diesem Kommentar
BOfH_666 577 Geschrieben 5. Dezember 2022 Melden Teilen Geschrieben 5. Dezember 2022 vor 6 Minuten schrieb massaraksch: dann fliegt man beim ersten Auftreten eines Fehlers aus der umgebenden foreach-Schleife raus. Ende Gelände. 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 Link zu diesem Kommentar
cj_berlin 1.315 Geschrieben 5. Dezember 2022 Melden Teilen Geschrieben 5. Dezember 2022 (bearbeitet) vor 30 Minuten 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 } } 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 Link zu diesem Kommentar
massaraksch 41 Geschrieben 6. Dezember 2022 Melden Teilen Geschrieben 6. Dezember 2022 Ja, da hab ich wohl was verwechselt. Danke für die Korrekturen. Zitieren Link zu diesem Kommentar
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.