The estimated reading time 5 minutes
Microsoft Teams mit Powershell / ISE verwalten (team templates und Vorlagen)
Hallo zusammen,
in letzter Zeit beschäftige ich mich immer mehr mit Microsoft Teams, deshalb habe ich mir gedacht, da lässt sich doch auch einiges über Powershell automatisieren. Deshalb hier mein erster Artikel zu MS Teams Administration mit Hilfe von Powershell.
Ziel dieses Artikels ist ein Teamtemplate zu erstellen, welches nachher beliebig vervielfältigt werden kann.
Zuerst müssen die cmdlets installiert werden. Dies kann sehr einfach durchgeführt werden. Dazu eine Powershell mit administrativen Rechten öffenen und folgenden Befehl eingeben.
Install-Module MicrosoftTeams -Force
aktuell sind die cmdlets in Version 0.9.1, was sich allerdings ständig ändern kann.
Um nun zu prüfen ob die Installation funktioniert hat kann folgendes cmdlet verwendet werden
Get-TeamHelp
Nun kann auch schon eine Verbindung zu Office365 Teams aufgebaut werden.
Um dies zu bewerkstelligen habe ich mir einen neuen Button in die ISE integriert siehe hierzu meinen früheren Artikel
In meiner Profildatei wurde folgende Zeile hinzugefügt:
#add msteams commands $parentteams = $psise.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add('MS Teams', $null, $null) $parentteams.Submenus.Add(' Start-Teams-Session',{ Invoke-Expression "$env:HOMEPATH\Documents\WindowsPowerShell\msteams\teamsconnection.ps1" }, $null) | Out-Null
Mit dem Klick auf den Button „Start-Teams-Session“ wird also folgendes Powershell Skript ausgeführt
$tenant = (Connect-MicrosoftTeams) $account = ($tenant.account) $tenantdomain = ($tenant.TenantDomain) $host.ui.RawUI.WindowTitle = "Windows Powershell ISE remote connection to Teams Tenant: $tenantdomain with account $account "
Beim Start werden die Zugangsdaten abgefragt (es muss kein globaler Administrator sein, aber der Benutzer muss eine gültige Teamslizenz hinterlegt haben)
Nach der erfolgreichen Anmeldung wird die Titelleiste meiner ISE geändert
Soweit mal zu den Basics.
Nun hatte ich folgende Anforderung:
Vorlagenerstellung:
Wenn ein neues Team angelegt wird soll dieses immer folgende Kanäle /Channel haben. (Teamtemplate)
Um die wichtigen Parameter zu übergeben habe ich eine CSV Datei erstellt, aus der die Namen, Kanäle und Beschreibungen entnommen werden.
Diese sieht wie folgt aus:
#TYPE Microsoft.TeamsCmdlets.PowerShell.Custom.GetTeam+GetTeamResponse DisplayName,Description,accesstype,alias,channel1,channel2,channel3,channel4,channeldes1,channeldes2,channeldes3,channeldes4 testteam03,created via powershell,public,testteam03,project1,issues,project2,documentation,description for project1,issues never occure,description for project2,place to store all documentation testteam04,created via powershell,public,testteam04,project1,issues,project2,documentation,description for project1,issues never occure,description for project2,place to store all documentation
Nun das Powershell Skript welches die Teams mit Channels anlegt.
#path to csv file $csvpath = "C:\temp\teams.csv" ################################################### #define permissions for teams (define true or false) no boolean!: # member permission to delete channels within the team $deletechannels = "false" #member permission to create and change channels $createupdatechannels = "false" #member permission to create and update connectors $createconnectors = "false" #member permission to create and change tabs $createtabs = "false" #member permission to add or remove apps $addapps = "false" ################################################### #define allowed fun settings #allow gifs $allowgiphy = "false" $allowstickers = "false" $allowcustmeme = "false" ################################################## #define team guest settings $deletechannelsguest = "false" $createupdatechannelsguest = "false" ################################################## #import information from csv file $importteams = @(Import-Csv -Path "$csvpath" -Encoding UTF8) #generating teams foreach ($team in $importteams){ #get information to variables $displayname = ($team.displayname) $description = ($team.description) $alias = ($team.alias) $accesstype = ($team.accesstype) #creating new team $teamsid = (New-Team -DisplayName "$displayname" -Description "$description" -AccessType "$accesstype" -Alias "$alias") $groupid = ($teamsid.GroupId) # configure member permissions for new team Set-TeamMemberSettings -GroupId $groupid -AllowDeleteChannels $deletechannels -AllowCreateUpdateChannels $createupdatechannels -AllowCreateUpdateRemoveConnectors $createconnectors -AllowCreateUpdateRemoveTabs $createtabs -AllowAddRemoveApps $addapps #configure fun settings Set-TeamFunSettings -GroupId $groupid -AllowGiphy "$allowgiphy" -AllowCustomMemes "$allowcustmeme" -AllowStickersAndMemes "$allowstickers" #configure guest settings Set-TeamGuestSettings -GroupId $groupid -AllowDeleteChannels "$deletechannelsguest" -AllowCreateUpdateChannels "$createupdatechannelsguest" #configure channel-settings for the new team #generate object1 for channelsettings $channelproberties = @() $channelset1 = New-Object PSCustomObject #insert data from csv $channel1 = ($team.channel1) $channelset1 | Add-Member -MemberType NoteProperty -Name ChannelName -Value "$channel1" $channeldes1 = ($team.channeldes1) $channelset1 | Add-Member -MemberType NoteProperty -Name ChannelDescription -Value "$channeldes1" #adding information to object $channelproberties += $channelset1 #generate object 2 for channelsettings $channelset2= New-Object PSCustomObject #insert data from csv $channel2 = ($team.channel2) $channelset2 | Add-Member -MemberType NoteProperty -Name ChannelName -Value "$channel2" $channeldes2 = ($team.channeldes2) $channelset2 | Add-Member -MemberType NoteProperty -Name ChannelDescription -Value "$channeldes2" #adding information to object $channelproberties += $channelset2 #generate object 3 for channelsettings $channelset3= New-Object PSCustomObject #insert data from csv $channel3 = ($team.channel3) $channelset3 | Add-Member -MemberType NoteProperty -Name ChannelName -Value "$channel3" $channeldes3 = ($team.channeldes3) $channelset3 | Add-Member -MemberType NoteProperty -Name ChannelDescription -Value "$channeldes3" #adding information to object $channelproberties += $channelset3 #generate object 4 for channelsettings $channelset4= New-Object PSCustomObject #insert data from csv $channel4 = ($team.channel4) $channelset4 | Add-Member -MemberType NoteProperty -Name ChannelName -Value "$channel4" $channeldes4 = ($team.channeldes4) $channelset4 | Add-Member -MemberType NoteProperty -Name ChannelDescription -Value "$channeldes4" #adding information to object $channelproberties += $channelset4 # generate channels from objects array foreach($channel in $channelproberties){ $channelname = ($channel.channelname) $channeldescritpion = ($channel.channeldescription) New-TeamChannel -GroupId $groupid -DisplayName "$channelname" -Description "$channeldescritpion" | Out-Null } }
Das Ergebnis sieht nun so im Teams aus.
Auch die Einstellungen sind erfolgreich in Teams durchgeführt.Im Office 365 kann man nun die erstellten Office 365 Gruppen sehen
Selbstverständlich ebenfalls per Powershell im AzureAD auffindbar.
Get-AzureADGroup -SearchString testteam | fl
In weiteren Posts werde ich mich ebenfalls mit der Verwaltung von Teams beschäftigen.
Meinungen + Feature Anfragen gerne willkommen.
Wenn weitere Fragen sind, lasst mir einfach einen Kommentar zukommen, sollte euch der Artikel gefallen haben, drückt bitte auf „Helpful“.