Teams PowerShell

PowerShell ist die Umgebung, in der quasi fast alles in Teams verwaltet werden kann. Wobei Sie hier genau genommen mehrere PowerShell-Module unterscheiden müssen:

  • AzureAD-PowerShell
    Zum Anlegen, Löschen und Verwalten der AzureAD Objekte, die für Teams erforderlich sind. Selbst wenn die Benutzer mit ADSync verwaltet werden, sind z.B. Lizenzen hier zuzuweisen
  • CSOnlinePowerShell
    Die Verwaltung von Teams Richtlinien, Voice-Routen und vielen weiteren Dingen erfolgt weiterhin über die PowerShell, mit der sie früher auch Skype for Business Online verwaltet haben.
  • "Teams-PowerShell"
    Das, was Sie als Teams PowerShell herunter laden können, ist eigentlich ein Wrapper um die Graph API, um die Inhalte zu verwalten

Und das Teams im Hintergrund als Ablagen auch Exchange Postfächer, Office Groups, SharePoint Libraries und OneDrive nutzt, können Sie auch noch diese PowerShell-Umgebungen dazu zählen. Ich beschränke mich hier aber auf die CSOnlinePowerShell und Teams PowerShell.

Beispiel: Team anlegen

Ich habe hier mal exemplarisch ein paar Commandlet-Schnipsel vorbereitet. Sie müssen dazu die Teams PowerShell vorab installieren und eine Verbindung zu Exchange Online hergestellt haben. Eventuell müssen Sie die Abarbeitung der Befehle etwas pausieren, da auch AzureAD intern eine Replikation benutzt.

# Verbindung ueber die Teams API herstellen
Connect-MicrosoftTeams -accountID adminuser@uclabor.de

#Anlegen eines komplett neuen Teams
$team = New-Team `
   -mailnickname "Team1" `
   -Displayname "Team 1 zum Test" `
   -visibility "private"

# Teams per Default in der GAL verstecken, d.h. es kann nicht gesucht werden
Set-UnifiedGroup -identity $team.GroupID -HiddenfromAddressListEnabled $true

# bestehende Benutzer zum Team addieren
Add-TeamUser -GroupID $team.GroupID -user "user1@uclabor.de" -Role Owner
Add-TeamUser -GroupID $team.GroupID -user "user2@uclabor.de" -Role Member

# Channel addieren
New-TeamChannel -GroupID $team.GroupID -Displayname "Channel1"
New-TeamChannel -GroupID $team.GroupID -Displayname "Channel2"

# Team parametrisieren
Set-Team -GroupID $team.GroupID -AllowCustomMemes $true

Das Teams kann eventuell nicht sofort benutzt werden. Microsoft spricht von bis zu 1h Verzögerung, bis z.B. alle Services in der Cloud die aktuellen Daten erhalten haben.

Die Konfiguration, ob für das gerade angelegte Team z.B. der Gastzugriff erlaubt ist, ist etwas aufwändiger, da dazu erst ein Template angelegt werden muss.

# Die groupID abe ich ja noch. Ansonsten koennen Sie diese wie folgt erhalten
# $groupID = Get-UnifiedGroup -identity <mailadresse> `
             | select-object -expandproperty ExternalDirectoryObjectID
$groupID = $team.GroupID

# AD Object Settings Template anlegen
$SettingsID = Get-AzureADObjectSettings `
                   -targettype Groups `
                   -TargetObjkectID $groupID `
               | select-object -expandproperty ID

# Diese Einstellungen wird nun beim Team entfernt
Remove-AzureADObjkectSettings `
   -ID SettingsID `
   -TargetObjectID $GroupID `
   -targettype Groups

# Dann holen wir uns wieder das Template fuer Guest Access
$SettingsTemplate = Get-AzureADDirectorySettingsTemplate | where {$_.displayname -eq "group.Unified.Guest}
# Und davon leiten wir ein Settings ab
$DirectorySetting = $SettingsTemplate.CreateDirectorySetting()
# Da setzen wir dann Guest Access
$DirectorySetting["AllowToAddGuests"]=$false

# und nun koennen wir die Einstellung zuweisen
New-AzureADObjectSettings `
   -TargetObjectID GroupID `
   -TargetType Groups `
   -DirectorSetting $DirectorySetting

Bei den Beispielen ist keine Fehlerbehandlung umgesetzt. Wer solche Aufgaben automatisiert, sollte auf jeden Fall die Aktionen auf Fehler überwachen und ggfls. zurückstellen und später wiederholen. Wohl dem, der eine Provisioning-Software hat, die solche Schritte sequentiell und transaktionsorientiert abarbeiten kann.

Beispiel: Richtlinien zuweisen

Für Benutzer können unterschiedliche Richtlinien angewendet werden. Auch dies ist per PowerShell automatisierbar, z.B.: indem Sie die Berechtigungen an einer Gruppenmitgliedschaft oder anderen Kriterien fest machen oder aus einer CSV-Datei laden. Die Verwaltung der Teams Policies erfolgt über die Skype for Business Online Powershell und z.B. "Grant-CSTeamsMessagingPolicy"

# in einer Textdatei sind alle UPNs der Auszubildenden aufgeführt, die z.B. von der HR-Abteilung geliefert wurden
# Die Daten koennen aber auch z.B. per GET-ADUser oder Get-AzureADUser mit einem LDAP-Filter oder Get-ADGroupMember geladen werden

$userlist = get-content "azubiliste.csv"

foreach ($entry in $userlist) {
   Grant-CSTeamsMessagingPolicy `
      -identity $entry `
      -Policynamne "AzubiPolicy"
}

Über den Weg können Sie natürlich auch weitere Policies (Calling, Meeting, LiveEvents, Upgrade) zuweisen.

Teams Management mit PowerShell

Die Verwaltung von Teams, also der Teams selbst, der Channels etc. ist per Teams Client und natürlich per PowerShell möglich. Microsoft hat dazu ein Modul auf der TechNet Gallery veröffentlicht.

Die Befehle sind:

Bei Gelegenheit werde ich zu jedem Befehl mehr Details liefern.