Ziel:
Ich wollte diese Art von Liste erstellen:

Erster Test mit Power Automate

Ich begann mit der Umsetzung der Generierung eines Excel mit Power Automate, das sah so aus:
![]() |
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
~/powershell/pwsh
$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

