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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 314064
Url: https://administrator.de/contentid/314064
Printed on: April 23, 2024 at 22:04 o'clock
13 Comments
Latest comment
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
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
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
@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
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ß
@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ß
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 ), hier der Code für die EMS. Bitte Kommentare lesen vor dem Ausführen !
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:
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.
Wie immer alles ohne Gewähr . 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
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 ), 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:
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
}
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
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.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen und Lösung markieren. Merci.
Hallo,
kann ich die rechte einfach wieder mit Set-MailboxFolderPermission entfernen?
Viele Grüße
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
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
ersetzen, welche vorher mittels where-object die Existenz von Mailbox-Berechtigungen filtert.
Grüße Uwe
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}
Grüße Uwe