{"id":922,"date":"2018-08-22T13:47:46","date_gmt":"2018-08-22T11:47:46","guid":{"rendered":"https:\/\/www.krombusch.de\/?p=922"},"modified":"2021-11-01T12:36:21","modified_gmt":"2021-11-01T11:36:21","slug":"exchange-kalenderfreigaben-per-ps","status":"publish","type":"post","link":"https:\/\/www.krombusch.de\/?p=922","title":{"rendered":"Exchange Kalenderfreigaben per Powershell"},"content":{"rendered":"<p>Auf einem Exchange Server (hier 2010) sollen alle freigegebenen Kalender aller Postf\u00e4cher angezeigt werden. Man verliert ja irgendwann die \u00dcbersicht. Die berechtigten anderen Benutzer sind dann inclusive ihrer Berechtigung auf die jeweilige Freigabe aufzulisten.<\/p>\n<p>Vorhandene Powershell-Skripte f\u00fcr dieses Problem gibt es zuhauf. Sie iterieren \u00fcber alle Postf\u00e4cher und arbeiten dabei mit dem Suchparameter \u201efolderscope\u201c (hier calendar). Das funktioniert aber nur, wenn der (freigegebene) Kalender auch innerhalb der angenommenen Struktur im MAPI-Namespace liegt. Muss er aber nicht.<\/p>\n<p><!--more--><\/p>\n<p>Manche Experten \u201everschieben\u201c ihre Ordner auch auf die oberste Ebene, den IPM_SUBTREE. Oder speichern ihre Freigaben unterhalb des Papierkorbs. Alles schon gesehen. Dementsprechend erfordern auch die &#8222;Benutzerordner&#8220; etwas mehr Aufmerksamkeit.<\/p>\n<p>Das Skript muss deshalb m.E. alle Folder einer Mailbox auf den Typ \u201eCalendar\u201c testen und kann die Berechtigungen dann erst abfragen. Und im Nebeneffekt die Berechtigungen l\u00e4ngst gel\u00f6schter ActiveDirectory-Benutzer auch gleich entfernen.<\/p>\n<pre># 1. Alle Mailboxen auf dem Server\r\n$mailboxes = Get-MailBox\r\nforeach ($mailbox in $mailboxes | Where { $_.Name -notlike \"Administrator\" -and $_.Name -notlike \"Discovery*\"}) {\r\n $mName = $mailbox.name\r\n $mAlias = $mailbox.alias\r\n \"Suche in Mailbox $mAlias...\" \r\n \r\n # 2. Alle selbst erstellten Ordner und den (Haupt-)kalender suchen. Unabh\u00e4ngig vom Folderscope\r\n $folders = Get-MailboxFolderStatistics -Identity $mAlias | Where-Object { $_.FolderType -eq \"Calendar\" -or $_.FolderType -eq \"Vom Benutzer erstellt\" }\r\n foreach ($folder in $folders) {\r\n  \r\n # 3. Pfad zusammenbauen und testen, ob es sich beim Userfolder um den Typ \"Kalender handelt\"\r\n  $pfad = $mAlias + \":\" + $folder.folderPath.Replace(\"\/\",\"\\\")\r\n  $calname = Get-MailboxCalendarFolder -Identity \"$pfad\" -ErrorAction SilentlyContinue\r\n  if($calname) {\r\n  \r\n  # 4. Falls 3.: Sofern freigegeben, Berechtigungen anderer Benutzer anzeigen\r\n   $fp = Get-MailboxFolderPermission -identity \"$pfad\" | where { $_.User -notlike \"Anonym\" -and $_.User -notlike \"Standard\" }\r\n   if ($fp.length -gt 0) {\r\n    \"$pfad\"\r\n    foreach ($mUser in $fp) {\r\n     \"\"\r\n     $mUserID = $mUser.Identity.ToString()\r\n     $mUserValid = $mUser.IsValid\r\n     $mUserAccessRights = $mUser.AccessRights\r\n     \"\"\r\n     if($mUserID -like \"NT-Benutzer:*\") {\r\n      # Die Berechtigungen ung\u00fcltige Benutzer (nicht mehr im Active Directoy) werden entfernt.\r\n      # Keine Angst, das Skript fragt vor dem Entfernen aber jeweils nach\r\n      Remove-MailboxFolderPermission -Identity \"$pfad\" -User \"$mUserID\"\r\n     } else {\r\n      # Ausgabe\r\n      $mUserID\r\n      $mUserValid\r\n      $mUserAccessRights\r\n     }\r\n    }\r\n    \"----------------------\"\r\n    \"\"\r\n   }\r\n  }\r\n }\r\n}\r\n\r\n<\/pre>\n<p>Obige Zeilen m\u00f6gen nicht die Schnellsten sein, erf\u00fcllt aber die Bedingungen.<br \/>\nLetzter Nebeneffekt: Sie decken auch solch lustige Sachen auf, die sich wohl nur \u00fcber ein mehrfaches Nutzen der \u201escanpst.exe\u201c auf dem Client bereinigen lassen.<\/p>\n<p><a href=\"https:\/\/www.krombusch.de\/?attachment_id=925\" rel=\"attachment wp-att-925\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-925\" src=\"https:\/\/www.krombusch.de\/wp-content\/uploads\/2018\/08\/geisterordner.png\" alt=\"\" width=\"684\" height=\"569\" srcset=\"https:\/\/www.krombusch.de\/wp-content\/uploads\/2018\/08\/geisterordner.png 684w, https:\/\/www.krombusch.de\/wp-content\/uploads\/2018\/08\/geisterordner-300x250.png 300w, https:\/\/www.krombusch.de\/wp-content\/uploads\/2018\/08\/geisterordner-624x519.png 624w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auf einem Exchange Server (hier 2010) sollen alle freigegebenen Kalender aller Postf\u00e4cher angezeigt werden. Man verliert ja irgendwann die \u00dcbersicht. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-922","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/www.krombusch.de\/index.php?rest_route=\/wp\/v2\/posts\/922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.krombusch.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.krombusch.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.krombusch.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.krombusch.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=922"}],"version-history":[{"count":7,"href":"https:\/\/www.krombusch.de\/index.php?rest_route=\/wp\/v2\/posts\/922\/revisions"}],"predecessor-version":[{"id":930,"href":"https:\/\/www.krombusch.de\/index.php?rest_route=\/wp\/v2\/posts\/922\/revisions\/930"}],"wp:attachment":[{"href":"https:\/\/www.krombusch.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.krombusch.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.krombusch.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}