Bonjour à tous,

Je réalise un script qui me permet de créer et éditer des utilisateurs dans un AD via un fichier csv. Ce dernier est utilisé depuis plus d'un an maintenant avec des modifications régulières (cosmétiques/fonctionnelles/corrections).

Le problème vient d'un nouveau paramètre à renseigner. En effet depuis peu nous devons remplir le champ EmployeeType de nos utilisateurs. L'ajout de ce champ ne fonctionne ni en création ni en édition.

Voici ma procédure de création :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Function Create_User { 
    param (
        [Parameter(Mandatory = $true)]$User
    )

    $Dom = Get_AD_String                                                                          #on récupère les infos du domaines et unités d'organisation
    $DC  = Get_AD_String_OU
    $OU  = ""

    if ($User.Path -ne "") {                                                                      #si l'utilisateur doit être dans une OU
        $OU = Get_Path_OU($User.Path)
    }

    if ($User.Name -eq "") {                                                                      #si aucun nom de compte n'est défini
        $User.Name= Get_Login $User.GivenName $User.Surname                                       #on génère le login du compte
    }

    [...]
    New-ADUser -Name          $User.Name `
        -AccountPassword      $(ConvertTo-SecureString -AsPlainText $User.AccountPassword -Force) `
        -City                 $User.City `
        -Company              $User.Company `
        -Country              $User.Country `
        -Department           $User.Department `
        -Description          $User.Description `
        -DisplayName          $($User.GivenName + " " + $User.Surname) `
        -Division             $User.Division `
        -EmailAddress         $User.EmailAddress `
        -Enabled              $true `
        -GivenName            $User.GivenName `
        -HomePage             $User.HomePage `
        -HomePhone            $User.HomePhone `
        -Initials             $(Get_Initials $User.GivenName $User.Surname) `
        -MobilePhone          $User.MobilePhone `
        -Office               $User.Office `
        -OfficePhone          $User.OfficePhone `
        -OtherName            $User.OtherName `
        -PasswordNeverExpires $false `
        -PasswordNotRequired  $true `
        -Path                 $OU `
        -PostalCode           $User.PostalCode `
        -ProfilePath          $UProfiles `
        -SAMAccountName       $User.Name `
        -ScriptPath           $UScripts `
        -Server               $CONST_Serveur `
        -StreetAddress        $User.StreetAddress `
        -Surname              $User.Surname `
        -Title                $User.Title `
        -UserPrincipalName    $($User.Name + "@" + $Dom) `
        -EmployeeID           $User.EmployeeID                                                           
        #-HomeDirectory $UHome `                                                                  #paramètres non utilisés mais potentiellement intéressants
        #-HomeDrive "Q:" `
        #-EmployeeNumber $User.EmployeeNumber `
        #-Fax $User.Fax `
        #-LogonWorkstations $User.LogonWorkstations `
        #-Organization $User.organization
    
    Set-ADUser $User.Name -ChangePasswordAtLogon $false                                           #on règle le compte pour obliger l'utilisateur à changer son pass quand il se connectera pour la première fois
    $id = $User.GivenName + " " + $User.Surname
    Set-ADuser $User.Name -PassThru | Rename-ADObject -NewName $id                                #afin que le nom affiché dans la liste des utilisateurs AD soit "Prénom Nom" au lieu de "identifiant"

    #en cours
    #$tmp = Get-ADUser $User.Name -Properties ThumbnailPhoto
    #$tmp.ThumbnailPhoto | Set-Content $($CheminPhoto + "\" + $User.Name + ".jpg")
}
Lors de l'exécution aucune erreur, mais le champ EmployeeType reste vide !?

Pour l'édition c'est un peu plus retors : soit tout mes champs se remplissent (sauf EmployeeType), soit je parviens à remplir ce maudit champ... mais j'en perd la moitié.
version initiale, seul EmployeeType manque :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Function Edition {
    param (
        [Parameter(Mandatory = $true)]$User
    )

    $User.PsObject.Properties | where {($_.Name -ne "Name") -and ($_.Name -ne "Path") -and ($_.Value -ne $Null) -and ($_.Value -ne "")} | ForEach {
        $param = @{$_.Name = "$($_.Value)"}
        Set-ADUser -Identity $User.Name @param
    }
    $id = $User.GivenName + " " + $User.Surname
    set-ADuser -Identity $User.Name -PassThru | Rename-ADObject -NewName $id
}
me donne l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Set-ADUser : Impossible de trouver un paramètre correspondant au nom « EmployeeType ».
Au caractère C:\Users\***\Desktop\créa utils-bckp.ps1:415 : 41
+         Set-ADUser -Identity $User.Name @param
+                                         ~~~~~~
    + CategoryInfo          : InvalidArgument : (:) [Set-ADUser], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.ActiveDirectory.Management.Commands.SetADUser
et la version "corrigée"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function Edition {
    param (
        [Parameter(Mandatory = $true)]$User
    )

    $User.PsObject.Properties | where {($_.Name -ne "Name") -and ($_.Name -ne "Path") -and ($_.Value -ne $Null) -and ($_.Value -ne "")} | ForEach {
        Write-Host $_.Name"="$_.Value
        $param = @{}
        $param[$_.Name] = $_.Value
        Get-ADUser -Identity $User.Name -Properties * | Set-ADUser -Replace $param #ligne modifiée
    }
    

    $id = $User.GivenName + " " + $User.Surname
    set-ADuser -Identity $User.Name -PassThru | Rename-ADObject -NewName $id
}
me renvoie cette erreur (avec plusieurs attributs différents)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Set-ADUser : L’attribut ou la valeur de service d’annuaire spécifié n’existe pas
Nom du paramètre : Surname
Au caractère C:\Users\***\Desktop\créa utils.ps1:417 : 57
+         Get-ADUser -Identity $User.Name -Properties * | Set-ADUser -Replace $par ...
+                                                         ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument : (CN=Ceciestun Te...,DC=DEFO,DC=lan:ADUser) [Set-ADUser], ArgumentException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Bref, je me tire un peu les cheveux. J'aimerai éviter au maximum de traiter les attributs au cas par cas, je suis preneur de toute idée.

Merci beaucoup de votre aide.