Question Export d'infos issues de l'AD dans fichier Excel

Plus d'informations
il y a 2 ans 2 mois - il y a 2 ans 2 mois #31723 par Arnaud
Bonjour a tous,
Voilà, j'ai récupéré un bout de code que j'ai modifié afin qu'il m'exporte des infos de l'AD vers un fichier Excel.
Voici le script:

[b]# Installation du module "ImportExcel"
Install-Module -Name ImportExcel

# Emplacement du fichier de sortie
$xlfile = "\\MONSERVEUR\PARTAGE\PSreports.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue

# Extraction des infos de l'AD, dans l'OU "MONOU" (et les sous OU)
$excel = Get-ADUser -Filter * -SearchBase "OU=MONOU,DC=MONDOMAINE,DC=local" -Properties * |
    Select-Object sAMAccountName, department, Mail, OfficePhone, Company | Select -First 130 |
    Export-Excel $xlfile -AutoSize -StartRow 2 -TableName Utilisateurs -PassThru

# Get the sheet named Sheet1
$ws = $excel.Workbook.Worksheets['Sheet1']

# Create a hashtable with a few properties
# that you'll splat on Set-Format
$xlParams = @{WorkSheet=$ws;Bold=$true;FontSize=18;AutoSize=$true}

# Create the headings in the Excel worksheet
Set-Format -Range A1  -Value "Utilisateurs" @xlParams

# Close and Save the changes to the Excel file
Close-ExcelPackage $excel[/b]


Cela me donne un fichier Excel avec sur une même ligne: sAMAccountName, department, Mail, OfficePhone, Company pour les 130 premiers utilisateurs de l'AD
Tout fonctionne parfaitement !

Mais j'aimerais que ce script m'en fasse un peu plus...
J'aimerais que pour chaque utilisateur, il me rajoute au bout de chaque ligne, les groupes auxquels appartient l'utilisateur.
Chose que j'arrive a obtenir via la commande suivante:
[b]Get-ADPrincipalGroupMembership loginutilisateur | select name[/b]

Il doit falloir définir pour chaque ligne, "sAMAccountName" comme étant une variable avec une boucle ForEach...
Ca ne doit pas être grand chose, mais je ne m'en sort pas.
Merci d'avance pour votre aide.
 
Dernière édition: il y a 2 ans 2 mois par Arnaud.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 2 mois #31724 par Philippe
salut Arnaud,

j'ai une solution sans boucle à te proposer qui n'utilise pas Get-ADPrincipalGroupMembership, mais l'attribut MemberOf de l'utilisateur dans l'AD

d'abord un conseil : ne jamais récupéré toutes les propriétés quand tu interroge un AD, tu le surcharge pour rien et en plus ta requête sera inutilement longue ! 
ne sélectionne que les attributs utile, ce qui donne ça :
Get-ADUser -Filter * -SearchBase "OU=MONOU,DC=MONDOMAINE,DC=local" -Properties sAMAccountName, department, Mail, OfficePhone, Company, MemberOf 
Company           : companie de powershell
Department        : technique
DistinguishedName : CN=Lee Nux,OU=utilisateurs test,DC=domtest,DC=lan
Enabled           : True
GivenName         : Lee
Mail              : Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
MemberOf          : {CN=grservtech,OU=utilisateurs test,DC=domtest,DC=lan, CN=grimptech,OU=utilisateurs 
                    test,DC=domtest,DC=lan, CN=grserveurs,OU=utilisateurs test,DC=domtest,DC=lan, 
                    CN=grcommun,OU=utilisateurs test,DC=domtest,DC=lan}
Name              : Lee Nux
ObjectClass       : user
ObjectGUID        : 899597e7-0067-4d36-93e1-16ecac1616a1
OfficePhone       : 01 02 33 44 55
SamAccountName    : lnux
SID               : S-1-5-21-1212780272-13945088-1065478795-1106
Surname           : Nux
UserPrincipalName : Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.


quelques explications sur la solution :
- j'ai créé une propriété personnalisée dans le select que j'ai appelé groupes, grace à @{name = 'Groupes'; expression = { }}
Dans cette propriété, dans expression, je peut y mettre du code
- dans ce code, je travail l'attribut "MemberOf" pour qu'il soit utilisable dans un fichier excel
   1 -> suppression des CN=, OU= et DN= pour ne garder que le nom du groupe. le -replace '^CN=([^,]+).+$','$1'  cette dernière partie est un expression régulière.
   2 -> 
suppression des sauts de lignes, le -join ","
pour info : $_ de $_.MemberOf contient l'objet transmis par le pipeline " | ". Ici l'objet AD d'un utilisateur

si j'ai bien fait le copier/coller, tu remplace ta ligne par celle ci et c'est tout !!  
$excel = Get-ADUser -Filter * -SearchBase "OU=MONOU,DC=MONDOMAINE,DC=local" -Properties sAMAccountName, department, Mail, OfficePhone, Company, MemberOf |
    Select-Object sAMAccountName, department, Mail, OfficePhone, Company, @{name = 'Groupes'; expression = {$_.MemberOf -replace '^CN=([^,]+).+$','$1' -join ", "}} |
    Select -First 130 | Export-Excel $xlfile -AutoSize -StartRow 2 -TableName Utilisateurs -PassThru

 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 2 mois #31725 par Arnaud
Bonsoir Philippe,
C'est ou qu'on envoie la caisse de champagne ?! ^^
Tu es mon héro de ces 3 derniers jours passés sur le sujet !!!
Merci, merci et encore merci !

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.074 secondes
Propulsé par Kunena