mosurama
Goto Top

Exchange Einführung - Kalender aller User untereinander freigeben und hinzufügen

Guten Abend,

ich stehe vor folgender "Herausforderung":

In einem 50-Mann-Unternehmen wird von Tobit auf Exchange 2013 und Outlook 2013 umgestellt.

In Tobit waren bislang alle Kalender für alle anderen freigegeben und die User haben sich alle Kalender der anderen Usern eingeblendet.

Nun wechselt das Unternehmen nach Exchange.

Um das Leben einfacher zu machen stellt sich die Frage, ob man die Freigabe aller Kalender für alle Benutzer eventuell durch ein Powershell Script machen könnte und ob es eine automatisierte Möglichkeit gibt, alle Kalender aller Benutzer ins eigene Outlook einzubinden

Die Freigabe der Kalender würde ich sofern nicht anders machbar mit Exfolders machen, aber für das hinzufügen der Kalender habe ich bislang keine Möglichkeit gefunden.

Ich bin für jeden Hinweis dankbar, vielen Dank

Andreas

Content-Key: 314064

Url: https://administrator.de/contentid/314064

Printed on: April 19, 2024 at 22:04 o'clock

Member: Mosurama
Mosurama Aug 31, 2016 at 20:17:39 (UTC)
Goto Top
OK, für mein erstes Problem, der Freigabe der Kalender hatte ich wohl Tomaten auf den Augen:

mit

Add-MailboxFolderPermission -identity “username:\kalender” –user “domain\username” -AccessRights Reviewer

scheint das zu klappen

bleibt noch mein Problem, ob ich es den Usern erleichtern kann, die Kalender hinzufügen zu müssen
Member: VGem-e
VGem-e Sep 01, 2016 at 05:39:59 (UTC)
Goto Top
Moin,

wir hatten dies mit EXC und Outlook so gelöst, dass jeder User den eigenen Kalender führt, in den Termine/Projekte eingetragen sind, die nur den eigenen Arbeitsbereich betreffen.

Zusätzlich existiert bei uns ein zentraler Kalender, in den von uns und den angeschlossenen Außenstellen üblicherweise übergreifende Termine und längere Abwesenheiten (z.B. Urlaub, Lehrgang etc.) eingetragen sind; diese Abwesenheiten jedoch werden nur mit dem Namen des Sachbearbeiters versehen und aus Datenschutzgründen nicht mit dem Grund der Abwesenheit (geht ja andere Kollegen nichts an, sollte jemand z.B. wg. eines Klinikaufenthalts mal länger ausfallen).

Gruß
VGem-e
Member: vBurak
vBurak Sep 01, 2016 at 06:52:12 (UTC)
Goto Top
Will man wirklich 50 Kalender in Outlook aufmachen? Ich bezweifel, dass man die alle ständig anschauen möchte.

Man kann doch einfach "Kalender öffnen" in Outlook und dann den Benutzer auswählen. Das sind zwei Klicks.
Member: VGem-e
VGem-e Sep 01, 2016 at 07:51:12 (UTC)
Goto Top
Servus,

@vBurak:

Genau deshalb 2 Kalender (1x eigener Kalender, 1x zentraler Kalender), die je nach Vorliebe des Benutzers nebeneinander oder übereinander liegen können sind und die Termine anzeigen.

Gruß
VGem-e
Member: Mosurama
Mosurama Sep 01, 2016 at 08:26:57 (UTC)
Goto Top
Es geht nicht darum, die 50 alle gleichzeitig aufzumachen. Aber in der Übersicht der Kalender sollen die alle erscheinen, damit für Terminabstimmungen die jeweiligen User nur angeklickt werden müssen. Hier jedesmal, wenn man einen neuen braucht, erst über Kalender öffnen - Namen aus der Liste wählen - insbesondere für Empfangs- und Assistenzkräfte ein gewisses zeitliches Problem.

Auto-Mapping würde in meinem Fall auch nichts bringen weil kein Full Access bei den Mailboxen eingerichtet werden.

Aber gut, dann wird es darauf hinauslaufen, dass sich jeder einmalig alle Kalender hinzufügen darf

Vielen Dank an alle, die nachgedacht haben
Member: VGem-e
VGem-e Sep 01, 2016 at 14:46:09 (UTC)
Goto Top
Servus,

@Mosurama:

Wir lösen dies üblicherweise so, dass derjenige Mitarbeiter, der eine Besprechung mit weiteren Kollegen durchführen will, einfach übers Outlook eine neue Besprechung anlegt und dazu übers Outlook entsprechende Einladungen versendet (geht evtl. auch anders/einfacher?) Dies funktioniert hier ganz gut.

Gruß
Member: colinardo
Solution colinardo Sep 01, 2016, updated at May 08, 2019 at 08:33:15 (UTC)
Goto Top
Hallo Andreas,
also die Berechtigungen kannst du ja per Powershell schnell selbst auf dem Exchange mit for-schleife über alle user (Get-AdUser/Get-Mailbox) skripten (Add-MailboxFolderPermission).

Falls du dazu noch nicht in der Lage bist (hoffentlich bald face-wink), hier der Code für die EMS. Bitte Kommentare lesen vor dem Ausführen !
<#
    Mailboxen gegenseitigen Zugriff auf den Kalender geben 
#>

# Zuweisbare Rechte
# Kombinierbare Rechte sind folgende
<#
   - CreateItems   Der Benutzer kann Elemente im angegebenen Ordner erstellen.
   - CreateSubfolders   Der Benutzer kann Unterordner im angegebenen Ordner erstellen.
   - DeleteAllItems   Der Benutzer kann alle Elemente im angegebenen Ordner löschen
   - DeleteOwnedItems   Der Benutzer kann nur die Elemente löschen, die im angegebenen Ordner erstellt wurden.
   - EditAllItems   Der Benutzer kann alle Elemente im angegebenen Ordner bearbeiten.
   - EditOwnedItems   Der Benutzer kann nur die Elemente bearbeiten, die im angegebenen Ordner erstellt wurden.
   - FolderContact   Der Benutzer ist der Kontakt für den angegebenen Öffentlichen Ordner.
   - FolderOwner   Der Benutzer ist der Besitzer des angegebenen Ordners. Der Benutzer kann den Ordner anzeigen, den Ordner verschieben und Unterordner erstellen. Der Benutzer darf keine Elemente lesen, bearbeiten, löschen oder erstellen.
   - FolderVisible   Der Benutzer kann den angegebenen Ordner anzeigen, darf jedoch in diesem Ordner keine Elemente lesen oder bearbeiten.
   - ReadItems   Der Benutzer kann Elemente im angegebenen Ordner lesen.
#>
$rights = "FolderVisible","ReadItems"  
# Maiboxen definieren (hier nur Usermailboxen)
$mailboxes = Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited
$mailboxes | %{
    $box = $_
    # Kalendername extrahieren (Grund: Diese sind sprachabhängig je nachdem welche Sprache die Mailbox hat)
    $calname = [string](Get-mailboxfolderstatistics $box -folderscope calendar | ?{$_.FolderType -eq 'Calendar'} | select -First 1).Name  
    # Allen mailboxen (außer der eigenen) Zugriffsrechte auf den Kalender vergeben
    $mailboxes.Alias | ?{$_ -ne $box.Alias} | %{Add-MailboxFolderPermission "$($box.alias):\$calname" -AccessRights $rights -User $_ -Confirm:$false}  
}

Für das Hinzufügen der Kalender zur Gruppe der freigegebenen Kalender in Outlook kannst du dieses Client-Powershell-Skript bemühen, das automatisiert das Hinzufügen der freigegeben Kalender zur Navigationpane im Kalenderabschnitt:

Dazu gibt man in der zweiten Zeile eine den DN einer Gruppe an in der die gewünschten Nutzer Mitglied sind. Am besten eine extra Gruppe dafür erstellen.

Damit die User keine Benachrichtung über skriptgesteuerten Zugriff bekommen, noch die folgende Einstellung im Outlook TrustCenter aktivieren:

screenshot

Das macht man dann am besten per GPO, denn wenn man es von hand lokal macht muss man Outlook sonst einmalig als Administrator starten, und das wäre ja blöd.

Die Schritte die der Code vollzieht sind jeweils kommentiert.

Kurzbeschreibung: Das Skript holt sich die Liste der User via LDAP aus dem AD öffnet Outlook via COM-Object Instanz, iteriert über alle User und fügt diese der Kalenderpane unter der Gruppe Freigegebene Kalender hinzu, passende Berechtigung s.o. natürlich vorausgesetzt.

Es ist also ein Client-Skript muss also auf jedem Client einmalig ausgeführt werden.

# DN der Gruppe angeben
$group = 'CN=TestGruppe,CN=Users,DC=domain,DC=de'  
# fetch all users of group without current user
$users = (new-object adsisearcher("LDAP://$(([adsi]'LDAP://rootDSE').defaultNamingContext)","(&(objectCategory=User)(memberof=$group))","SamAccountName",[System.DirectoryServices.SearchScope]::Subtree)).FindAll() | %{$_.Properties['SamAccountName']} | ?{$_ -ne $env:Username}  

if ($users){
    # get outlook com-object
    [void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")  
    $objOL = [microsoft.visualbasic.interaction]::GetObject($null,"Outlook.Application")  
    if (!$objOL){$objOL = New-Object -Com Outlook.Application}
    # get mapi namespace reference
    $ns = $objOL.GetNamespace("MAPI")  
    # get calendar nav module
    $navMod = $ns.GetDefaultFolder(9).GetExplorer().NavigationPane.Modules.GetNavigationModule(1)
    # get peoples subgroup
    $navGroup = $navMod.NavigationGroups.GetDefaultNavigationGroup(1)
    # for each user ...
    $users | %{
        # create receipient object
        $recipient = $ns.CreateRecipient($_)
        # resolve receipient
        $recipient.Resolve() | out-null
        # if recipient found
        if ($recipient.Resolved){
            # get calendar folder reference of recipient
            $calendar = $ns.GetSharedDefaultFolder($recipient, 9)
            if($calendar){
                # add calendar to calendar navigation pane
                $navGroup.NavigationFolders.Add($calendar) | out-null
            }else{
                write-host "Calendar of '$_' could not be retrieved. Make sure the user has enough access rights." -ForegroundColor Yellow  
            }
        }else{
            write-host "Receipient '$_' could not be resolved!" -ForegroundColor Yellow  
        }
    }
    # quit outlook
    $objOL.Quit()
}else{
    write-host "No Users to process." -ForegroundColor Yellow  
}
Wie immer alles ohne Gewähr face-wink. Der Code erhebt keinen Anspruch auf Fehlerfreiheit.

Hoffe das hilft dir etwas weiter.
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Member: colinardo
colinardo Sep 06, 2016 updated at 15:02:58 (UTC)
Goto Top
Kommt hier noch was oder war's das ?

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen und Lösung markieren. Merci.
Member: Mosurama
Mosurama Sep 07, 2016 at 10:44:44 (UTC)
Goto Top
Hi,

sorry, die Migrationsnacharbeiten gingen erst gestern Abend zu Ende.

Das erste Script war super, das zweite haben wir nach ersten Tests dann doch nicht gebraucht, sobald eine gewisse Anzahl von Kalendern hinzugefügt wurde, wurde das ganze zäh und unübersichtlich so dass sie sich jetzt dazu entschlossen haben, selektiv zu arbeiten.

Aber vielen Dank für die Scripte, ich bin sicher, ich kann sie anderswo auch noch einsetzen
Member: Mosurama
Mosurama Sep 07, 2016 at 10:45:35 (UTC)
Goto Top
PS: Ein Fehler i Text: Exfolders funktioniert unter Exchange 2013 nicht mehr
Member: Apenimb
Apenimb Apr 21, 2022 updated at 22:09:06 (UTC)
Goto Top
Hallo,

kann ich die rechte einfach wieder mit Set-MailboxFolderPermission entfernen?

# Maiboxen definieren (hier nur Usermailboxen)
$mailboxes = Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize unlimited
$mailboxes | %{
    $box = $_
    # Kalendername extrahieren (Grund: Diese sind sprachabhängig je nachdem welche Sprache die Mailbox hat)
    $calname = [string](Get-mailboxfolderstatistics $box -folderscope calendar | ?{$_.FolderType -eq 'Calendar'} | select -First 1).Name  
    # Allen mailboxen (außer der eigenen) Zugriffsrechte auf den Kalender entfernen
    $mailboxes.Alias | ?{$_ -ne $box.Alias} | %{Remove-MailboxFolderPermission "$($box.alias):\$calname" -User $_ -Confirm:$false}  
}

Viele Grüße
Member: colinardo
colinardo Apr 22, 2022 updated at 08:34:38 (UTC)
Goto Top
Servus @Apenimb, willkommen auf Administrator.de!
Ja kannst du so machen, wenn du das Skript vorher schon angewendet hast. Bei nachträglichen manuellen Modfikationen an den Berechtigungen wird es aber so ein paar Fehler werfen wenn Berechtigungen von manchen Mailboxen fehlen, was aber keine Auswirkungen hat, die kannst du aber mittels -ErrorAction SilentlyContinue beim CMDLet Remove-MailboxFolderPermission unterdrücken wenn dich das stört.
Alternativ zur Fehlerunterdrückung lässt sich in deine Zeile 8 durch
Get-MailboxFolderPermission "$($box.alias):\$calname" | ?{$_.User.RecipientPrincipal.alias -in $mailboxes.Alias} | %{Remove-MailboxFolderPermission $_.Identity -User $_.User.RecipientPrincipal.alias -Confirm:$false}  
ersetzen, welche vorher mittels where-object die Existenz von Mailbox-Berechtigungen filtert.

Grüße Uwe
Member: Apenimb
Apenimb Apr 22, 2022 at 09:13:19 (UTC)
Goto Top
Super Danke für die Info