Question New-ADUSER Problème gestion argument vide

Plus d'informations
il y a 10 ans 4 mois #20930 par Deplanche
Bonjour,

J'ai un problème pour lequel je ne trouve pas de solution.

Contexte :
J'ai un formulaire qui me génère un fichier csv. Certaines valeurs du fichier généré peuvent être vides. Exemple la valeur Fax.

Problème :
Quand j'ai un argument qui à une valeur vide pour le paramètre -OtherAttributes, mon script me retourne une erreur :

[code:1]New-ADUser : Le serveur ne souhaite pas traiter la requête
Au caractère C:\Scripts\CréationNouvelUtilisateurv1.50.ps1:497 : 6
+ New-ADUser -Name $ImportCSV.NomComplet -DisplayName $ImportCSV.NomComplet - ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Jean BON,CN...domain,DC=local:«»String) [New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.NewADUser[/code:1]

Le script fonctionne parfaitement bien, quand je n'ai pas de valeur vide pour le paramètre -OtherAttributes

Je ne trouve pas comment gérer ce cas de figure.

J'ai tenté de générer une chaine de caractère stockée dans une variable en testant les valeurs de mon fichier CSV, pour ne tenir compte que des valeurs non vide. Pour ensuite place cette variable en argument du paramètre -OtherAttributes. Cela me généré me disant que ce paramètre attendait un type System.Collections.Hashtable au lieu du type string.

Merci :)

Message édité par: Dionysoos, à: 22/10/15 16:04<br><br>Message édité par: Dionysoos, à: 22/10/15 16:11

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

Plus d'informations
il y a 10 ans 4 mois #20933 par Deplanche
Avec un tableau associatif comme argument ça fonctionne mieux...

Voilà la solution que j'ai mise en place pour prendre en compte les valeurs vides :
[code:1]$ADArgument = @{}

if(($sDistinguishedName -ne \&quot;\&quot;«») -and ($sDistinguishedName -ne $null))
{
$ADArgument += @{'distinguishedName' = $sDistinguishedName}

}
If(($sPaysHLCN -ne \&quot;\&quot;«») -and ($sPaysCN -ne $null))
{
$ADArgument += @{'c' = $sPaysCN}

}
If(($sVilleHLCN -ne \&quot;\&quot;«») -and ($sVilleCN -ne $null))
{
$ADArgument += @{'l' = $sVilleCN}

}
If(($ImportCSV.Fax -ne \&quot;\&quot;«») -and ($ImportCSV.Fax -ne $null))
{
$ADArgument += @{'facsimileTelephoneNumber' = $ImportCSV.Fax}
}
New-ADUser -Name $ImportCSV.NomComplet -DisplayName $ImportCSV.NomComplet ... -OtherAttributes $ADArgument
[/code:1]

C'est loin d'être élégant je vous l'accorde mais ça fonctionne.

Si vous avez des pistes pour faire quelques chose de plus propre je suis preneur<br><br>Message édité par: Dionysoos, à: 22/10/15 16:41

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

Plus d'informations
il y a 10 ans 4 mois #20936 par Arnaud Petitjean
Salut Dionysoos,

Pour moi il y a un problème de logique dans ton test car une chaine ne peut pas être à la fois vide et nulle. Pour que ton test fonctionne il faudrait mettre un OU et non pas un ET.

De plus, ce qui à mon avis pose problème à la commande New-ADUser ce sont les valeurs d'attributs à $null. Les valeurs chaine vide ne posent pas de problème.

Autre chose, il faut savoir que les paramètres des commandes du module AD, comme de ceux de nombreuses autres commandes, autorisent le passage de valeur \&quot;byPropertyName\&quot; (regarde l'aide complète via Help Get-ADUser -full). En conséquence de quoi, si tu passes à la commande par le biais du pipe un objet qui contient des noms de propriété identiques aux noms des paramètres alors PowerShell associera automatiquement ces derniers entre eux.
Ainsi si tu renommes les noms des colonnes de ton fichier CSV comme attendu par la commande, tu devrais être capable d'écrire quelque chose du genre :

[code:1]Import-Csv 'c:\users.csv' -useculture | New-ADUser -company 'PowerShell-Scripting.com'[/code:1]

Bon OK ça ne résout pas ton problème de OtherAttribute mais ça peut être bon à savoir... ;)

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

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