Concept sur la création d'une hiérarchie du groupe de messagerie Office365 sur excel avec powershell

J'ai besoin d'une aide de concept sur un script qui doit faire les travaux suivants:

IMPORTANT: Je ne veux pas que vous écrivez pour moi le script, aidez-moi seulement à comprendre les moyens de le faire!

Dans mon milieu de travail, nous avons 180 users et 125 groupes de dissortingbution. l'user et le groupe de dissortingbution sont nesteds en eux-mêmes.

ie Company Group -> Company IT -> ICT -> User1 " " " -> User2 " " -> HR -> User3 " " " -> User4 " -> Company FR -> Res -> User5 " " -> User6 

Donc, chaque groupe de dissortingbution peut avoir soit un autre groupe ou un user à l'intérieur. Il est possible que le groupe n'ait pas d'user à l'intérieur comme la possibilité que l'user ne soit aucun groupe.

Je crée un script qui lit chaque user et chaque groupe et me connecte pour chaque user dont le groupe le contient, mais il ne fonctionne évidemment que pour le dernier groupe.

 ie Group 1 -> Group 2 -> Group 3 -> User 1 

le script m'écrit

  User 1 are in: Group 3 

J'ai besoin d'un script plus "intelligent" et complexe.
Il doit tout faire par lui-même et apprendre la hiérarchie sans aide de l'user. Le résultat final est un file Excel signalant tout comme les premières windows de code que j'écris.

Un grand merci à tous m'aider, peu importe si seulement un peu.

Modifier:

J'ajoute ici le script précédent pour l'aide que vous comprenez.

 ############################################ # Filling variables ############################################ Write-Host "Download Dissortingbution Group list..." $gruppi = Get-DissortingbutionGroup | Sort-Object DisplayName Write-Host "Download MSOL User list..." $utenti = Get-MsolUser | Where-Object {$_.isLicensed -eq 'True'} $utenti = $utenti.userprincipalname $utenti = $utenti | Sort-Object $filePath = "c:\UtentiNoGruppoLOG2.txt" $utentisenzagruppo = @() $masortingxutentigruppi = @() foreach ($gruppo in $gruppi) { Write-host "Downloading $($gruppo.DisplayName) member list..." $masortingxutentigruppi += ,@($gruppo,(Get-DissortingbutionGroupMember -identity $gruppo.PrimarySmtpAddress)) } ############################################ # Check existing log file ############################################ cls If (Test-Path $filePath) { $confCancellazione = Read-Host "`nFile Log già presente, eliminarlo? (Y/N)" If ($confCancellazione -eq 'y') { Remove-Item $filePath } } ############################################ # Main ############################################ cls foreach ($utente in $utenti) { $voidControl = 0 write-host "`n$($utente.ToUpper()) è nei seguenti gruppi:" write-output "`r`n$($utente.ToUpper()) è nei seguenti gruppi:" >> $filePath foreach ($masortingxutentigruppo in $masortingxutentigruppi) { $mailgruppo = $($masortingxutentigruppo[0].PrimarySmtpAddress) if ($($masortingxutentigruppo.PrimarySmtpAddress) -contains $utente) { $voidControl = 1 Write-host "$($masortingxutentigruppo[0].DisplayName) `($mailgruppo`)" write-output "$($masortingxutentigruppo[0].DisplayName) `($mailgruppo`)" >> $filePath } } # Check ugrouped users if ($voidControl -eq 0) { write-host "NESSUN GRUPPO!!!" write-output "NESSUN GRUPPO!!!" >> $filePath $utentisenzagruppo += "`r`n$utente" } } ############################################ # Report ungrouped users ############################################ write-host "`r`nUtenti senza gruppi:" write-output "`r`nUtenti senza gruppi:" >> $filePath if (!$utentisenzagruppo) { write-host "`r`nNESSUN UTENTE E' SENZA GRUPPO!" write-output "`r`nNESSUN UTENTE E' SENZA GRUPPO!" >> $filePath } else { write-host "$utentisenzagruppo" write-output "$utentisenzagruppo" >> $filePath }