Möchte ich eine komplette Gruppe basierend auf die Teams-Mitgliedschaft auf einen (Teams-)Termin einladen, dann schaut dies auf den ersten Blick ganz einfach aus. In der Teams-Registerkarte „Beiträge“ wähle ich unter dem Kamera-Symbol "Besprechung planen“:
Und schon wird der Kanal zur Besprechung eingeladen:
Schick ich den Termin ab, landet die Besprechungserinnerung zwar im Kanal „Beiträge“ und der Termin wird in meinem Kalender eingetragen, aber die anderen Mitglieder des Kanals bekommen in den meisten Fällen keine Einladung bzw. Termineintrag.
„In den meisten Fällen“ hat mich auf die Spur geführt, dass es was mit dem Team bzw. mit der dahinterliegenden Microsoft 365 (AAD) Gruppe zu tun haben muss.
Und tatsächlich hat Microsoft schon im April 2018 entschieden diese Gruppen im Exchange zu verstecken. Damit kann ich leider auch Outlook nicht verwenden, um die Team-Mitglieder einzuladen, weil die zu Grunde liegende Gruppe dort nicht sichtbar ist.
Aber warum funktioniert die Einladung nicht, wenn ich den Kanal bei der neuen Besprechung in Teams auswähle? Jede Gruppe hat eine Abonnentenliste, die festlegt wer Nachrichten und damit auch die Termineinladungen an die Gruppe erhalten soll. Neue Benutzer werden standardmäßig leider nicht zur „Abonnentenliste“ der Gruppe hinzugefügt und damit bekommen sie auch keine Termineinladung ☹.
Es gibt allerding zwei Schalter auf der Gruppe mit der das Verhalten geändert werden kann:
Set-UnifiedGroup -Identity MyGroup -AutoSubscribeNewMembers:$True
Damit werden automatisch alle neuen Gruppen(Team)-Mitglieder auch zur Abonnentenliste hinzugefügt. Bestehende Gruppenmitglieder kann ich mit einer kleinen Routine hinzufügen:
$Members = Get-UnifiedGroupLinks -LinkType Members -Identity MyGroup
Foreach ($M in $Members) {
Add-UnifiedGroupLinks -LinkType Subscribers -Links M.PrimarySmtpAddress -Identity MyGroup }
Mit diesem Befehl lege ich fest, dass die Kalenderereignisse gefiltert und nur diese an alle gesendet werden sollen. Und schon werden die Termineinladungen an den Kanal an alle Mitglieder geschickt:
Set-UnifiedGroup -Identity MyGroup -AlwaysSubscribeMembersToCalendarEvents
Möchte ich alle bestehenden Gruppen entsprechend anpassen, kann ich dies mit einer kleinen PowerShell Routine machen. Diese muss ich dann allerdings regelmäßig laufen lassen, damit sie immer wieder auf neue Teams angewendet wird.
# UpdateSubscribersInGroupsUsedByTeams.PS1
CLS
Write-Host "Finding team-enabled Groups to process..."
$Groups = Get-UnifiedGroup -Filter {ResourceProvisioningOptions -eq "Team"} -ResultSize Unlimited
$Groups = $Groups | ? {$_.AutoSubscribeNewMembers -eq $False -Or $_.AlwaysSubscribeMembersToCalendarEvents -eq $False}
$Report = [System.Collections.Generic.List[Object]]::new() # Create output file
#initialize progress bar
$ProgDelta = 100/($Groups.count)
$CheckCount = 0 ; $GroupNumber = 0 ; CLS
ForEach ($Group in $Groups) {
$GroupNumber++
$CheckCount += $ProgDelta
$GroupStatus = "Processing " + $Group.DisplayName + " ["+ $GroupNumber +"/" + $Groups.Count + "]"
Write-Progress -Activity "Updating subscriber information for group" -Status $GroupStatus -PercentComplete $CheckCount
# Update group so that new members are added to the subscriber list and will receive calendar events
Set-UnifiedGroup -Identity $Group.ExternalDirectoryObjectId -AutoSubscribeNewMembers:$True -AlwaysSubscribeMembersToCalendarEvents
# Get current members and the subscribers list
$Members = Get-UnifiedGroupLinks -Identity $Group.ExternalDirectoryObjectId -LinkType Member
$Subscribers = Get-UnifiedGroupLinks -Identity $Group.ExternalDirectoryObjectId -LinkType Subscribers
# Check each member and if they're not in the subscriber list, add them
ForEach ($Member in $Members) {
If ($Member.ExternalDirectoryObjectId -notin $Subscribers.ExternalDirectoryObjectId) { # Not in the list
# Write-Host "Adding" $Member.PrimarySmtpAddress "as a subscriber"
Add-UnifiedGroupLinks -Identity $Group.ExternalDirectoryObjectId -LinkType Subscribers -Links $Member.PrimarySmtpAddress
$ReportLine = [PSCustomObject] @{
Group = $Group.DisplayName
Subscriber = $Member.PrimarySmtpAddress
Name = $Member.DisplayName}
$Report.Add($ReportLine) }
} #End ForEach
} #End ForEach
$Report | Export-CSV -NoTypeInformation c:\temp\SubscriberGroupUpdates.csv
Write-Host "All done. Details of updates are in c:\temp\SubscriberGroupUpdates.csv"
Danke an Tony Redmond für das Script, welches auch von GitHub heruntergeladen werden kann.
Vorher muss ich meine PowerShell natürlich mit dem ExchangeOnline verbinden.
Da gibt es auch ein PowerShellscript mit Beschreibung von Tony, welches alle notwendigen Schritte erledigt.
Damit stelle ich die Verbindung zu O365 her:
. .\Connect-Office365Services.ps1
Connect-ExchangeOnline
Comments