Question Lister utilisateurs de plusieurs OU et pour chaque, ajouter une propriété custom

Plus d'informations
il y a 1 mois 1 jour #32770 par Julien
Bonjour,

Je souhaite récupérer la liste de tous les utilisateurs de plusieurs OU identifiées et extraire cette liste dans un CSV avec plusieurs propriétés renseignées pour chaque utilisateur. Jusqu'à là, pas de problème.

Mon problème commence lorsque je souhaite ajouter une propriété custom, nommée "Option Masquée", pour chaque utilisateur de la liste obtenue ci-dessus.

Je ne sais pas comment m'y prendre. Je parviens bien à ajouter à utilisateur, dans une boucle, la propriété supplémentaire, mais je ne sais pas comment faire ensuite pour récupérer l'ensemble de ces utilisateurs avec cette nouvelle propriété, dans un CSV en sortie.
Sur mon script actuel, j'ai un message à chaque itération qui m'indique ceci : "Add-Member : Cannot add a member with the name "Option Masquée..." because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command."

Je vous montre ce que j'ai commencé à écrire : 

$Ous= 'OU=AGA-CGAC-GIE,OU=DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM' , 'OU=AUTRES,OU=DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM' , 'OU=BANQUE,DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM' 


$Ous | ForEach-Object {

$NomOU = $_
    
   #Get-ADUser -Filter * -SearchBase $_ -Properties * -server "fiducial.dom" | Select Name,GivenName,Surname,DisplayName,SamAccountName,EmailAddress | Export-Csv -Path \\svlyofic15\stockage\UTILISATEURS\c.bouteloup\UsersFIDUCIALparOUavecdescriptionetBP.csv -Delimiter ";"
  $Members = Get-ADUser -Filter * -SearchBase $_ -Properties * -server "fiducial.dom" | Select-Object -Property @{Name = 'OU' ; Expression = {$NomOU}}, @{Name = 'class' ; Expression = {$_.objectClass}},sn,sAMAccountName,userPrincipalName,@{Name = 'Expiration' ; Expression = {$_.AccountExpirationDate}},displayName,@{Name = 'Bureau' ; Expression = {$_.physicalDeliveryOfficeName}},mail,title,department,company,@{Name = 'Ville' ; Expression = {$_.l}},@{Name = 'Sid' ; Expression = {$_.objectSid}},description,@{Name = 'BP' ; Expression = {$_.postOfficeBox}},givenName,employeeNumber
   
  $result = foreach($m in $members){

  $OptionMAPI = @()
  
  if ($m.mail -eq "" -or $m.mail -eq $null){
  $OptionMAPI="SANS BAL"
                                           }

  elseif ($m.msExchHideFromAddressLists -eq $true){
  $OptionMAPI="MASQUE"
                                                  }


   else{
   $OptionMAPI="NON MASQUE"

       }
       
   $m | Add-Member -MemberType NoteProperty -Name "Option Masquée..." -Value $OptionMAPI
}

$result | Export-Csv -Path \\svlyofic15\stockage\UTILISATEURS\c.bouteloup\UsersFIDUCIALparOUavecdescriptionetBP.csv -Delimiter ";" -NoTypeInformation

   } 

Merci pour votre aide

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

Plus d'informations
il y a 1 mois 15 heures - il y a 1 mois 15 heures #32773 par Christophe MELIN
Bonjour,

Peut-être un problème avec l'objet $m du foreach. C'est possiblement toujours le même objet réutilisé à chaque itération. Donc la première exécution de add-member fonctionne mais pas les suivantes.
De plus, je pense que ton export dans un fichier .csv doit être en dehors de la boucle globale.
Essaies le code réécrit ci-dessous :
$Ous= @(
    'OU=AGA-CGAC-GIE,OU=DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM',
    'OU=AUTRES,OU=DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM',
    'OU=BANQUE,DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM'
)


$result = @()

ForEach ($NomOU in $Ous) {
    $arrMembers = @( Get-ADUser -Filter * -SearchBase $NomOU -Properties * -server "fiducial.dom" )

    foreach($member in $arrMembers) {
        $obj =  $member | Select-Object -Property @{Name = 'OU' ; Expression = {$NomOU}}, @{Name = 'class' ; Expression = {$_.objectClass}},sn,sAMAccountName,userPrincipalName,@{Name = 'Expiration' ; Expression = {$_.AccountExpirationDate}},displayName,@{Name = 'Bureau' ; Expression = {$_.physicalDeliveryOfficeName}},mail,title,department,company,@{Name = 'Ville' ; Expression = {$_.l}},@{Name = 'Sid' ; Expression = {$_.objectSid}},description,@{Name = 'BP' ; Expression = {$_.postOfficeBox}},givenName,employeeNumber

        if ($member.mail -eq "" -or $member.mail -eq $null){
            $OptionMAPI="SANS BAL"
        } elseif ($member.msExchHideFromAddressLists -eq $true) {
            $OptionMAPI="MASQUE"
        } else{
            $OptionMAPI="NON MASQUE"
        }

        $obj | Add-Member -MemberType NoteProperty -Name "Option Masquée" -Value $OptionMAPI

        $result += $obj
    }
}

$result | Export-Csv -Path "\\svlyofic15\stockage\UTILISATEURS\c.bouteloup\UsersFIDUCIALparOUavecdescriptionetBP.csv" -Delimiter ";" -NoTypeInformation

J'avoue que je n'ai fait aucun test mais je pense que cela devrait aller mieux.
Dernière édition: il y a 1 mois 15 heures par Christophe MELIN.

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

Plus d'informations
il y a 1 mois 9 heures #32774 par Julien
Bonjour Christophe,

Merci beaucoup pour ton aide. Ton script semble marcher parfaitement.
Je rencontre juste une erreur qui ne parait pas être lié à ton script mais plutot à plusieurs nommages d'OUs, sans que je comprenne pourquoi.

J'ai ce message par exemple sur mon OU 'BANQUE' dès que l'OU est passée dans la commande Get-ADuser.

Error : Get-ADUser : La syntaxe du nom de l’objet est incorrecte

J'ai pris le soin de vérifier le nom de l'OU sur l'AD, et elle est bien nommée comme indiqué. Je retrouve cette problématique sur quelques autres OU.

Pour le reste, le script marche parfaitement.

Aurais tu une idée de cette erreur ?

merci encore

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

Plus d'informations
il y a 4 semaines 16 heures - il y a 4 semaines 16 heures #32775 par Christophe MELIN
Bonjour,
Sur le code
$Ous= @(
    'OU=AGA-CGAC-GIE,OU=DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM',
    'OU=AUTRES,OU=DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM',
    'OU=BANQUE,DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM'
)
, il y a une erreur dans le nom pour BANQUE. Je pense que le nom correct est
    'OU=BANQUE,OU=DIRECTIONS FONCTIONNELLES,DC=FID,DC=DOM'

Si tu as le moindre doute sur un nom, tu passes par la console Active Directory en activant les fonctionnalités avancées, tu sélectionnes ton OU, avec un clic droit, tu affiches les propriétés et dans l'onglet "Editeur d'attributs", tu vas copier-coller le contenu du champ DistinguishedName
Dernière édition: il y a 4 semaines 16 heures par Christophe MELIN.

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

Plus d'informations
il y a 4 semaines 10 heures #32776 par Julien
Bonjour,

Bien vu, j'étais tellement dedans que ça ne m'a pas sauté aux yeux.
Merci beaucoup, ça marche parfaitement.

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

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