attribut EmployeeType de ADUser récalcitrant
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:
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:
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:
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:
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:
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.