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”.

Print Friendly, PDF & Email
  • Was this Helpful ?
  • yes   no