Objetivo:
Quería generar este tipo de lista:

Primer intento, con Power Automate

Me embarqué en la implementación de la generación de un Excel con Power Automate, se veía así:
![]() |
Para elaborar la lista, esto puede ser suficiente, pero en el momento de escribir este tutorial, Power Automate aún no lo sabe extraer miembros, propietarios o si el canal o equipo es privado. Así que no me conviene, busqué otra solución.
Segundo intento, usa PowerShell
Regresar a las poderosas herramientas de línea de comandos es a menudo el reflejo de los profesionales de TI, y no me decepcionó el módulo MicrosoftTeams para PowerShell.
Uso Jeedom, Intenté probar PowerShell adaptado a Raspbian. Esto es para instalarlo en un Raspi3B + que ya alberga Jeedom.
Tengo dos Jeedoms, uno en prod y uno en dev, uno en sous Estiramiento y un sub Buster. En el Microsoft Docs, está especificado para usar Stretch, en casa funciona en ambos (para lo que probé).
Instalación de PowerShell Core
Preguntar si instala una versión de 32 bits o 64 bits es el primer paso, para esto, escriba:
uname-m
Cualquier valor por debajo de ARMv7 están en 32 bits.
La versión de 64 bits comienza en AMRv8.
La última versión de powershell se puede encontrar en https://github.com/PowerShell/PowerShell para Raspbian.Version 7.1.0 el día de escribir este tutorial.
Si una versión antigua o preocupante ya está instalada, debe ser eliminada por:
rm -rf ~/powershell
Inicie la instalación (actualice el número de versión)
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" -Fuerza
~/powershell/pwsh
$psversiontable
En PowerShell, instale el módulo MicrosoftTeams
Desinstalar-Módulo -Nombre MicrosoftTeams Install-Módulo -Nombre MicrosoftTeams -Permitir Prelanzamiento Importación-Módulo MicrosoftTeams
Realice las primeras pruebas en la línea de comandos
Para comprobar la versión y la instalación correcta de MicrosoftTeams:
get-module | ft nombre, versión
Pruébalo recuperando la lista de equipos
Connect-MicrosoftTeams
Nota: : Recientemente, un error xdg-open bloquea la identificación, tuve que identificarme por un script usando Credential
Ver la lista de comandos de MiscrosoftTeams Module
módulo get-command-MicrosoftTeams
Sigue las instrucciones en amarillo para identificarte
$AllTeams = Get-Team Write-Output $AllTeams
Se debe mostrar la lista de equipos
Instalar PSFTP
Para enviar un archivo generado por Powershell a un servidor FTP, la forma más fácil es instalar PSFTP (En PowerShell)
apt-get instalar PSFPT
Ejecutar un script de línea de comandos
Para iniciar el script Categoría: Equipos de _sigalou.ps1, utilice este comando:
~/powershell/pwsh -Archivo "teams_sigalou.ps1"
Generar un CSV con la lista Teams
Después de múltiples pruebas, aquí está el último script, no dude en adaptarlo.
# Script para generar la lista Teams y exportar a un archivo CSV y luego enviar este archivo por FTP para ser explotado por un archivo Excel # Dirigida por Sigalou 06/12/2020 sigalou@@sigalou-domotique.fr # Utilice GitHub o correo electrónico para cualquier pregunta, solicitudes de mejora y no dude en proponer mejoras # Por favor, deje estas líneas # Fuente: http://jeedom.sigalou-domotique.fr/generate-a-list-teams-teams-their-channels-owners-members # o https://github.com/sigalou/MicrosoftTeamstoCSV # Parámetro de identificación FPT([string]$Nombre de usuario, [string]$Contraseña, [cambiar]$AMF,[int]$Acción) $passwordFTP = ConvertTo-SecureString -AsPlainText "xxxxx" -Fuerza $credentialsFTP = New-Object System.Management.Automation.PSCredential "xxxxx _ftp", $passwordFTP Importación-Módulo PSFTP # Identificación M365 $Nombre de usuario = "[email protected]" $Contraseña = "xxxx" #Conéctese a Microsoft Teams $Module=Get-Module -Nombre MicrosoftTeams -ListAvailable if($Module.count -eq 0) { El módulo Write-Host de MicrosoftTeams no está disponible -ForegroundColor amarillo $Confirm= Read-Host ¿Está seguro de que desea instalar el módulo? [Y] Sí [N] No if($Confirme -match "[yY]") { Install-Module MicrosoftTeams } else { Write-Host MicrosoftTeams module is required.Please install module using Install-Module MicrosoftTeams cmdlet. A la salida } } Write-Host ’n’n’n’n’n’nLaunch ... -ForegroundColor Amarillo #Autenticación mediante MFA if($mfa.IsPresente) { $«Equipo=Connect-MicrosoftTeams }» (en inglés). #Autenticación usando otra cosa que no sea MFA { #Almacenamiento de la credencial en el script para el propósito de la programación / Pasar la credencial como parámetro if($UserName -ne "") -y ($Contraseña -ne "")) { $SecuredPassword = ConvertTo-SecureString -AsPlainText $Contraseña -Fuerza $Credencial = Nuevo-Objeto System.Management.Automation.PSCredential $Nombre de usuario,$SecuredPassword $Equipo=Conectar-MicrosoftEquipos -Credencial $Acreditación } else { $«Equipo=Connect-MicrosoftTeams } }» (en inglés). #Compruebe la conectividad de los equipos If($Equipo -ne $null) { Write-host ́nConnected successfully to Microsoft Teams -ForegroundColor Green } other { El error Write-Host ocurrió al crear la sesión Teams. Por favor, inténtelo de nuevo -ForegroundColor Red exit } # Colocación $Fiel a tener una depuración en la pantalla para seguir la generación $modeDEBUG=$Falso $Resultado="" $Resultados=@() $Path="./TeamsData.csv" Si (Test-Path $Ruta){ Remove-Item $« Path } Write-Host Data Recovery» (en inglés). $Recuento = 0 $Teams=Get-Team -Visibilidad Privada $nbTeamsPrivate=$Conde de Equipos #$Teams=Get-Team -Visibilidad Pública -Usuario [email protected] $Teams=Get-Team -Visibilidad pública $nbEquipos=$Conde de Equipos $ColA=$nbTeams.ToString()+"-"+$nbTeamsPrivate.ToString() $Resultado=@{'ColA'=$ColA;'ColB'="Actualización del $((Obtener-Fecha -formato 'dd-MM-aaaa' HH:mm').ToString()";} $Resultados= Nuevo-Objeto psobject -Propiedad $Resultado $Resultados | selecciona 'ColA', 'ColB' | Export-Csv $Path -NoTypeInformation -Append Write-Host ’nProcesamiento de datos... $Equipos | Ordenar-Objeto DisplayName | foreach { $counterLines=0 $Nombre del equipo=$_.Display $Descripción=$_.Descripción $GroupId=$_.GroupId $TeamUser=Get-TeamUser -GroupId $GroupId $Miembro del equipoCount=$TeamUser.Contador $TeamPrefix=""" $putVirgule=0 $NombreProprio="" $AllProprios=$TeamUser | Where-Object { $_.Role-eq 'Propietario' } $a) TouslesProprios | foreach { si ($putVirgule -eq 1) { $putVirgule=0 $NombreProprio=$ApellidoProprio+", " } $NombreProprio=$NombreProprio+$_.Nombre $putVirgule=1 } $NombreProprio=$NombreProprio+" y "+$TeamMemberCount+" miembros" si ($TeamMemberCount -gt 80) { $NombreProprio="" $🌐 " } si ($_.Archived -eq "Verdadero") { $TeamPrefix="🗄" (en inglés). $: NameProprio="[ Archivado ]" } If($Descripción -eq $Nombre del equipo) {$Descripción=""} Escribir-Progreso -Actividad " $Cuenta/$nbEquipos $TeamName " si$modeDEBUG) { Write-Host ’n ╔═══════[$Nombre del equipo] $Descripción -ForegroundColor green} $Count++ Get-TeamChannel -MembresíaTipo Estándar -GroupId $GroupId | foreach { $Nombre del canal=$_.DisplayNombre Si($ChannelName -ne "general") { Escribir-Progreso -Actividad " $Cuenta/$nbEquipos $Nombre del equipo // $Nombre del canal" #$Descripción=$_.Descripción si ($modeDEBUG) { Write-Host ╠═══> [$Nombre del canal] $ChannelMemberCount $Descripción} $Resultado=@{'ColA'="";'ColB'=$ChannelName;} } else { $Resultado=@{'ColA'=$TeamPrefix+$Nombre del equipo;'ColB'=$ApellidoProprio;} } $Resultados= Nuevo-Objeto psobject -Propiedad $Resultado $Resultados | selecciona 'ColA', 'ColB' | Export-Csv $Ruta de acceso -NoTypeInformation -Apéndice $MeterLines++ } $channelsprives=Get-TeamChannel -Tipo de Membresía Privada -GroupId $GroupId $canalesprivescount=$canalprives.Count Si($canalesprivescount -eq "1") { si ($modeDEBUG) { Write-Host ╠═══> +$canalprivescount canal privado } $Resultado=@{'ColA'="";'ColB'="+1 canal privado";'ColC'="";'ColD'="";} $Resultados= Nuevo-Objeto psobject -Propiedad $Resultado $Resultados | selecciona 'ColA', 'ColB' | Export-Csv $Ruta de acceso -NoTypeInformation -Apéndice $« counterLines++ } elseIf» (en inglés).$canalesprivescount -gt 1) { si ($modeDEBUG) { Write-Host ╠═══> +$Canales privadosprivescount Canales privados } $Resultado=@{'ColA'="";'ColB'="+$canales privadosprivescount canales";} $Resultados= Nuevo-Objeto psobject -Propiedad $Resultado $Resultados | selecciona 'ColA', 'ColB' | Export-Csv $Ruta de acceso -NoTypeInformation -Apéndice $MeterLines++ } si ($contraLíneas -eq '1') { si ($modeDEBUG) { Write-Host ╠═══> Añadir una línea } vacía $Resultado=@{'ColA'="";'ColB'=" ";} $Resultados= Nuevo-Objeto psobject -Propiedad $Resultado $Resultados | selecciona 'ColA', 'ColB' | Export-Csv $Path -NoTypeInformation -Añádase } si ($modeDEBUG) { Write-Host ╚══════════════════════════════════════════════════════ -ForegroundColor green } } Write-Progress -Activity "“n Processed Teams count: $Cuenta “n” Procesamiento actual: $TeamName ’n Canal de tratamiento actual: $ChannelName" -Completado if((Test-Path -Path $Path) -eq "True") { Write-Host “nReport available in $« Path -ForegroundColor Green } Disconnect-MicrosoftTeams» (en inglés). # Enviar el archivo TeamsData.csv en ftp Set-FTPConnection -Credentials $credentialsFTP -Server ftp.xxxx.org -Sesión FloFTP -ignoreCert -UseBinary -KeepAlive $Sesión = Get-FTPConnection -Sesión FloFTP Get-ChildItem ".\TeamsData.csv" | Add-FTPItem -Sesión $Sesión -Camino /Equipos/ -Sobreescritura

