Erstellen einer Liste von Teams, ihren Kanälen, Besitzern, …-Mitgliedern mit Power Automate oder PowerShell

Ziel:

Ich wollte diese Art von Liste erstellen:

excelteams

 Erster Test mit Power Automate

pa

Ich begann mit der Umsetzung der Generierung eines Excel mit Power Automate, das sah so aus:

 pa2

Um die Liste zu erstellen, kann dies ausreichen, aber zu dem Zeitpunkt, zu dem ich dieses Tutorial schreibe, Power Automate weiß es noch nicht Entnahme von Mitgliedern, Eigentümern oder Informationen darüber, ob der Kanal oder das Team privat ist. Das passt mir also nicht, ich habe nach einer anderen Lösung gesucht.

Zweiter Versuch, PowerShell verwenden

Die Rückkehr zu leistungsstarken Befehlszeilen-Tools ist oft der Reflex von IT-Spezialisten, und ich wurde nicht enttäuscht mit das MicrosoftTeams-Modul für PowerShell.

Unter Verwendung Jeedom, Ich habe versucht, PowerShell für Raspbian zu testen. Dies geschieht, um es auf einem Raspi3B+ zu installieren, auf dem bereits Jeedom gehostet wird.

Ich habe zwei Jeedoms, einen in prod und einen in dev, einen unter Stretch und ein Sub Buster. In den Microsoft-Dokumente, es wird angegeben, Stretch zu verwenden, zu Hause funktioniert es auf beiden (für das, was ich getestet habe).

Installation von PowerShell Core

Die Frage, ob eine 32-Bit- oder eine 64-Bit-Version installiert wird, ist der erste Schritt, um Folgendes einzugeben:

uname -m

Alle Werte unter ARMv7 Sie sind in 32 Bit.
64-Bit-Version startet bei AMRv8.

Die neueste Version von Powershell finden Sie unter https://github.com/PowerShell/PowerShell für Raspbian.Version 7.1.0 am Tag des Schreibens dieses Tutorials.

Ist bereits eine ältere oder problematische Version installiert, so ist diese zu löschen durch:

rm -rf ~/powershell

Installation starten (Versionsnummer aktualisieren)

sudo su - apt-get install '^libssl1.0.[0-9]$' libunwind8 -y wget https://github.com/PowerShell/PowerShell/releases/download/v7.1.0/powershell-7.1.0-linux-arm32.tar.gz mkdir ~/powershell tar -xvf ./powershell-7.1.0-linux-arm32.tar.gz -C ~/powershell sudo ~/powershell/pwsh -c New-Item -ItemType SymbolicLink -Path "/usr/bin/pwsh" -Target "$PSHOME/pwsh" -Force
So starten Sie PowerShell
~/powershell/pwsh
So überprüfen Sie die Version
$psversiontable

Installieren Sie in PowerShell das MicrosoftTeams-Modul

Uninstall-Module -Name MicrosoftTeams Install-Module -Name MicrosoftTeams -AllowPrerelease Import-Module MicrosoftTeams

Erste Tests in der Kommandozeile durchführen

So überprüfen Sie die Version und die korrekte Installation von MicrosoftTeams:

get-module | ft name, version

Probieren Sie es aus, indem Sie die Teamliste abrufen

Connect-MicrosoftTeams

Nota : In letzter Zeit blockiert ein xdg-open-Fehler die Identifizierung, ich musste mich mit einem Skript mit Credential identifizieren

Liste der MiscrosoftTeams-Modul-Befehle anzeigen

get-command -MicrosoftTeams-Modul

Befolgen Sie die gelben Anweisungen, um sich zu identifizieren

$AllTeams = Get-Team Write-Output $AllTeams

Die Liste der Teams muss angezeigt werden

PSFTP installieren

Um eine von PowerShell generierte Datei an einen FTP-Server zu senden, installieren Sie am einfachsten PSFTP (In PowerShell)

apt-get install PSFPT

Starten eines Befehlszeilenskripts

So starten Sie das Skript _sigalou-Teams.ps1, verwenden Sie diesen Befehl:

~/powershell/pwsh -File "teams_sigalou.ps1"

Generieren eines CSV mit der Teamliste

Nach mehreren Versuchen ist hier das letzte Skript, zögern Sie nicht, es anzupassen.

# Skript zum Generieren der Teamliste und Exportieren in eine CSV-Datei und Senden dieser Datei per FTP, um von einer Excel-Datei verwendet zu werden # Regie: Sigalou 06/12/2020 sigalou@@@sigalou-domotique.fr # Verwenden Sie GitHub oder E-Mail für Fragen, Verbesserungswünsche und zögern Sie nicht, Verbesserungen vorzuschlagen # Bitte hinterlassen Sie diese Zeilen # Quelle: http://jeedom.sigalou-domotique.fr/generieren-eine-Liste-Teams-ihre-Kanäle-Eigentümer-Mitglieder # oder https://github.com/sigalou/MicrosoftTeamstoCSV # FPT-Kennung param([string]$UserName, [string]$Password, [Switch]$MFA,[int]$Maßnahme) $passwordFTP = ConvertTo-SecureString -AsPlainText "xxxxx" -Force $credentialsFTP = New-Object System.Management.Automation.PSCredential "xxxxx_ftp", $passwordFTP Import-Modul PSFTP # Kennung M365 $UserName = "[email protected]" $Password = "xxxx" #Connect zu Microsoft Teams $Module=Get-Module -Name MicrosoftTeams -ListAvailable if($Module.count -eq 0) { Write-Host MicrosoftTeams module is not available -ForegroundColor yellow $Confirm= Read-Host Are you sure you want to install module? [Y] Yes [N] No if($Confirm -match "[yY]") { Install-Module MicrosoftTeams } else { Write-Host MicrosoftTeams module is required.Please install module using Install-Module MicrosoftTeams cmdlet. Exit } } Write-Host ¿n¿n¿n¿n¿nStart ... -ForegroundColor Yellow #Autentication using MFA if($mfa.IsPresent) { $Team=Connect-MicrosoftTeams } #Authentication using non-MFA else { #Storing credential in script for scheduling purpose/ Passing credential as parameter if(($UserName -ne "") -and ($Password -ne "")) { $SecuredPassword = ConvertTo-SecureString -AsPlainText $Password -Force $Credential = New-Object System.Management.Automation.PSCredential $UserName,$SecuredPassword $Team=Connect-MicrosoftTeams -Credential $Credential } else { $Team=Connect-MicrosoftTeams } } #Check for Teams connectivity If($Team -ne $null) { Write-host ¿nMit Microsoft Teams erfolgreich verbunden -ForegroundColor Green } else { Write-Host Error occurred while creating Teams session. Please try again -ForegroundColor Red exit } # Setzen $True, um einen Debug auf dem Bildschirm zu haben, um die Generation zu verfolgen $modeDEBUG=$False $Result="" $Results=@() $Path="./TeamsData.csv" If (Test-Path $Path){ Remove-Item $Path } Write-Host ́nDatenwiederherstellung... $Count=0 $Teams=Get-Team -Visibility Private $nbTeamsPrivate=$Teams.Count #$Teams=Get-Team -Visibility Public -User [email protected] $Teams=Get-Team -Visibility Public $nbTeams=$Teams.Count $ColA=$nbTeams.ToString()+"-"+$nbTeamsPrivate.ToString() $Result=@{'ColA'=$ColA;'ColB'="Aktualisierung des $((Get-Date -format 'dd-MM-yyyy¿ HH:mm').ToString()";} $Ergebnisse = New-Object psobject -Property $Result $Ergebnisse | select 'ColA', 'ColB' | Export-Csv $Path -NoTypeInformation -Lehrt Write-Host ¿nDatenverarbeitung... $Teams | Sort-Object DisplayName | foreach { $ZählerLinien=0 $TeamName=$_.DisplayName $Beschreibung=$_.Beschreibung $GroupId=$_.GroupId $TeamUser=Get-TeamUser -GroupId $GroupId $TeamMemberCount=$TeamUser.Count $TeamPrefix="" $setzenVirgule=0 $NameProprio="" $AlleProprios=$TeamUser| Where-Object { $_.Role -eq 'Owner' } $AlleProprios | foreach { if ($setzenVirgule -eq 1) { $setzenVirgule=0 $NameProprio=$NameProprio+", "}" $NameProprio=$NameProprio+$_.Name $setzenVirgule=1 } $NameProprio=$NameProprio+" und "+"$TeamMemberCount+" Mitglieder" if ($TeamMemberCount -gt 80) { $NameProprio="" $TeamPrefix="🌐 " } if ($_.Archived -eq "True") { $TeamPrefix="🗄—" $NameProprio="[ Archiviert ]" } If($Beschreibung -eq $TeamName) {$Beschreibung=""} Write-Progress -Activity " $Count/$nbTeams $TeamName " if ($modeDEBUG) { Write-Host ́n╔═══════[$TeamName] $Beschreibung -ForegroundColor green} $Count++ Get-TeamChannel -MembershipType Standard -GroupId $GroupId | foreach { $ChannelName=$_.DisplayName If($ChannelName -ne "general") { Write-Progress -Activity " $Count/$nbTeams $TeamName // $ChannelName" #$Beschreibung=$_.Description if ($modeDEBUG) { Write-Host ╠═══> [$ChannelName] $ChannelMemberCount $Beschreibung} $Result=@{'ColA'="";'ColB'=$ChannelName;} } else { $Result=@{'ColA'=$TeamPrefix+$TeamName;'ColB'=$NameProprio;} } $Ergebnisse = New-Object psobject -Property $Result $Ergebnisse | select 'ColA', 'ColB' | Export-Csv $Path -NoTypeInformation -Append $ZählerLinien++ } $kanäleprives=Get-TeamChannel -MembershipType Private -GroupId $GroupId $Kanäleprivescount=$kanäleprives.Count If($Kanäleprivescount -eq "1") { if ($modeDEBUG) { Write-Host ╠═══> +$private Kanäle Privatkanal } $Result=@{'ColA'="";'ColB'="+1 privater Kanal";'ColC'="";'ColD'="";} $Ergebnisse = New-Object psobject -Property $Result $Ergebnisse | select 'ColA', 'ColB' | Export-Csv $Path -NoTypeInformation -Append $ZählerLinien++ } elseIf($Kanäleprivescount -gt 1) { if ($modeDEBUG) { Write-Host ╠═══> +$private Kanäleprivate Kanäle } $Result=@{'ColA'="";'ColB'="+$private Kanäleprivescount private Kanäle";} $Ergebnisse = New-Object psobject -Property $Result $Ergebnisse | select 'ColA', 'ColB' | Export-Csv $Path -NoTypeInformation -Append $ZählerLinien++ } if ($ZählerLinien -eq '1') { if ($modeDEBUG) { Write-Host ╠═══> Es wird eine leere }-Zeile hinzugefügt $Result=@{'ColA'="";'ColB'=" ";} $Ergebnisse = New-Object psobject -Property $Result $Ergebnisse | select 'ColA', 'ColB' | Export-Csv $Path -NoTypeInformation -Append } if ($modeDEBUG) { Write-Host ╚══════════════════════════════════════════════════════ -ForegroundColor green } } Write-Progress -Activity "¿n Processed Teams count: $Count "́n" Currently Processing: $TeamName ́n Currently Processing Channel: $ChannelName" -Completed if((Test-Path -Path $Path) -eq "True") { Write-Host ́nReport available in $Path -ForegroundColor Green } Disconnect-MicrosoftTeams # Senden Sie die Datei TeamsData.csv an ftp Set-FTPConnection -Credentials $credentialsFTP -Server ftp.xxxx.org -FloFTP-Sitzung -ignoreCert -UseBinary -KeepAlive $Sitzung = Get-FTPConnection -FloFTP-Sitzung Get-ChildItem ".\TeamsData.csv" | Add-FTPItem -Sitzung $Sitzung -Path /Teams/ -Overwrite      

Schreibe einen Kommentar