salut corly
d'abord les explications :
powershell est un langage orienté objet, ce qui ne t'aide pas
quand tu met dans la variable $UserListE1 l'UPN ta variable contient un objet dont une propriété est UserPrincipalName
d’ailleurs si tu affiche le contenue de la variable, tu vois écris :
UserPrincipalName
---------------------
nom@domaine.xxx
nom@domaine.xxx
nom@domaine.xxx
ou si tu regarde ton fichier o365_E1.txt :
#TYPE Selected.System.........
"UserPrincipalName"
"nom@domaine.xxx"
"nom@domaine.xxx"
"nom@domaine.xxx"
ce qui indique que ta variable est un objet de type tableau avec une propriété "UserPrincipalName"
pour lire cette objet directement après ça création tu doit donc indiqué la propriété que tu veux lire "$UserListE1.UserPrincipalName"
le point indique que tu veux utilisé une propriété ou une méthode de l'objet
une solution pour ton problème, c'est de lire la propriété dans ta boucle
1 2
| ForEach ($UE1 in $UserListE1) {
Get-ADUser -filter { mail -eq $UE1.UserPrincipalName } -properties DisplayName, SamAccountName, Title, Country, City, Division, Department, Manager, Enabled | Sort-Object DisplayName |
vois tu le $UE1.UserPrincipalName ?
une autre solution : ressemble a ton idée :
1 2 3 4 5 6
| $UserListE1 = Get-MsolUser -All | Where-Object { ($_.Licenses).AccountSkuId -match "bgingenieur:STANDARDPACK" } | Select-Object -ExpandProperty UserPrincipalName
.
.
.
ForEach ($UE1 in $UserListE1) {
Get-ADUser -filter { mail -eq $UE1} -properties DisplayName, SamAccountName, Title, Country, City, Division, Department, Manager, Enabled | Sort-Object DisplayName |
le Select-Object -ExpandProperty UserPrincipalName demande de renvoie non plus la propriété mais sont contenue, ce qui donne un tableau de string plutot qu'un tableau d'objet qui contient la propriété
dans les deux cas plus besoin de ça :
1 2 3 4 5 6
| $UserListE1 | Select-Object UserPrincipalName | Export-Csv -NoTypeInformation -Path "C:\_TEMP\Bin\o365_E1.csv"
$UsersE1 = "C:\_TEMP\Bin\o365_E1.csv"
(Get-Content $UsersE1) | select -Skip 1 | % { $_ -replace """", "" } | out-file -FilePath C:\_TEMP\Bin\o365_E1.txt -Force
$E1List = "C:\_TEMP\Bin\o365_E1.txt" |
une info au passage
ne fais pas de properties * dans tes get-adquelque chose, tu charge inutilement ton serveur AD et tu ralentie fortement ton script
selectionne directement tes attributs AD dans properties plutot que dans un select
Get-ADUser -filter { mail -eq $UE1 } -properties DisplayName, SamAccountName, Title, Country, City, Division, Department, Manager, Enabled | Sort-Object DisplayName
une autre encore
le Sort-Object DisplayName à la fin du get-aduser ne sert a rien puisque qu'il ne envoie qu'un seul utilisateur à chaque appel (chaque UPN est unique dans l'AD et normalement le mail aussi)
il sera plus efficace avant l'export
GetPropertiesE1 | Sort-Object DisplayName | Export-Csv "C:\_TEMP\ExtractE1Users.csv" -NoTypeInformation
bon je crois avoir fais le tour
si ta des questions nécessite pas !
Partager