Question [Résolu] Script modification attributs AD

Plus d'informations
il y a 4 ans 10 mois #28892 par gaudefroy
c'est vrai ça rentre peut être en contradiction avec ce que j'ai demandé plus haut mais je pense que maintenant c'est la bonne solution.

j'ai tenté le code ci-dessous: suis-je à coté de la plaque. Tu m'as dit qu'il y avait quelques petites choses à changer.

[code:1]

Import-Module ActiveDirectory

$users = Import-Csv -Path C:\users\administrateur\Desktop\Modif_users.csv -delimiter \";\"

$attribAD = \"Department\", \"Description\", \"st\", \"title\", \"physicalDeliveryOfficeName\", \"telephoneNumber\"

foreach ($user in $users) {
$usersearch = Get-ADUser -Filter \"samaccountname -eq '$($user.samAccountName)'\"-Properties mail, department, Description, st, title, physicalDeliveryOfficeName, telephoneNumber

if ($usersearch -eq $null) {
write-host \"l'utilisateur \"$user.samaccountname\" n'existe pas\" -ForegroundColor Red
}
else {
$attribAD | foreach {
if ($user.\"$_\".trim() -ne \"\"«») {
Set-ADUser $usersearch -Add @{$_ = $user.\"$_\"}
}
else
{Set-ADUser $usersearch -Clear $_
}
}
Write-Host \"Compte modifié pour\"$user.samaccountname\"\" -ForegroundColor green
}
}
[/code:1]

j'ai un message d'erreur:

[code:1]
Impossible d’appeler une méthode dans une expression Null.
Au caractère Ligne:16 : 17
+ if ($user.\"$_\".trim() -ne \"\"«») {
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Impossible d’appeler une méthode dans une expression Null.
Au caractère Ligne:16 : 17
+ if ($user.\"$_\".trim() -ne \"\"«») {
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
[/code:1]

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

Plus d'informations
il y a 4 ans 10 mois #28895 par Philippe
pour avoir cette erreur ça peut etre du qu'une des colonnes suivante manque dans ton fichier CSV : \"Department\", \"Description\", \"st\", \"title\", \"physicalDeliveryOfficeName\", \"telephoneNumber\"

au minimun ton fichier CSV doit resembler a ça :
[code:1]\"samaccountname\";\"Department\"; \"Description\"; \"st\"; \"title\"; \"physicalDeliveryOfficeName\"; \"telephoneNumber\"
test12;;tyty;;;;;[/code:1]

et a l'affichage la variable users donne ça :
[code:1]$users


samaccountname : test12
Department :
Description : tyty
st :
title :
physicalDeliveryOfficeName :
telephoneNumber :

# ou

samaccountname Department Description st title physicalDeliveryOfficeName telephoneNumber


--


test12 tyty

[/code:1]

je vient de testé le script sans probleme<br><br>Message édité par: 6ratgus, à: 9/05/19 17:42

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

Plus d'informations
il y a 4 ans 10 mois #28897 par gaudefroy
J'ai bien vérifié mon csv et je n'avais pas de double quote autour de chacune de mes entetes donc je les ai rajouté mais le problème persiste. Dans mon fichier il y a des colonnes supplémentaires avec ou sans valeurs.
Je ne pense pas que cela pose problème puisqu'il doit les ignorer ?

En gros ca ressemble à cela

[code:1]
\&quot;DisplayName\&quot;;\&quot;GivenName\&quot;;\&quot;mail\&quot;;\&quot;SamAccountName\&quot;;\&quot;Surname\&quot;;\&quot;Name\&quot;;\&quot;UserPrincipalName\&quot;;\&quot;company\&quot;;\&quot;Department\&quot;;\&quot;Description\&quot;;\&quot;physicalDeliveryOfficeName\&quot;;\&quot;st\&quot;;\&quot;title\&quot;;\&quot;telephoneNumber\&quot;
Saisonnier ADV;Saisonnier;saisonnier.adv@truc.fr;saisonnier.adv;ADV;Saisonnier ADV;saisonnier.adv@truc.fr;TRUC France;DEV/Boutique;Developpement/Boutique;Ville/Lieu;TRUC France;Compte Saisonnier ADV;
[/code:1]

ci dessous le retour de powershell. Par contre j'ai bien les variables dans le tableau. La modification du code que j'ai fait en ligne 16 à 18 sont elles bonnes ou dois je garder ton code exacte.

[code:1]
PS C:\Users\administrateur\Desktop&gt; C:\Users\administrateur\Desktop\modif_users_test.ps1
Impossible d’appeler une méthode dans une expression Null.
Au caractère C:\Users\administrateur\Desktop\modif_users_test.ps1:16 : 17
+ if ($user.\&quot;$_\&quot;.trim() -ne \&quot;\&quot;«») {
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Compte modifié pour saisonnier.adv

PS C:\Users\administrateur\Desktop&gt; $user


DisplayName : Saisonnier ADV
GivenName : Saisonnier
mail : Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
SamAccountName : saisonnier.adv
Surname : ADV
Name : Saisonnier ADV
UserPrincipalName : Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.
company : TRUC France
Department : DEV/Boutique
Description : Developpement/Boutique
physicalDeliveryOfficeName : ville/lieu
st : truc France
title : Compte Saisonnier ADV
telephoneNumber :




PS C:\Users\administrateur\Desktop&gt;
[/code:1]

voici le code

[code:1]
Import-Module ActiveDirectory

$users = Import-Csv -Path C:\users\administrateur\Desktop\Modif_users.csv -delimiter \&quot;;\&quot;

$attribAD = \&quot;Department\&quot;, \&quot;Description\&quot;, \&quot;st\&quot;, \&quot;title\&quot;, \&quot;physicalDeliveryOfficeName\&quot;, \&quot;telephoneNumber\&quot;

foreach ($user in $users) {
$usersearch = Get-ADUser -Filter \&quot;samaccountname -eq '$($user.samAccountName)'\&quot;-Properties mail, department, Description, st, title, physicalDeliveryOfficeName, telephoneNumber

if ($usersearch -eq $null) {
write-host \&quot;l'utilisateur \&quot;$user.samaccountname\&quot; n'existe pas\&quot; -ForegroundColor Red
}
else {
$attribAD | foreach {
if ($user.\&quot;$_\&quot;.trim() -ne \&quot;\&quot;«») {
Set-ADUser $usersearch -Add @{$_ = $user.\&quot;$_\&quot;}
}
else
{Set-ADUser $usersearch -Clear $_
}
}
Write-Host \&quot;Compte modifié pour\&quot;$user.samaccountname\&quot;\&quot; -ForegroundColor green
}
}
[/code:1]

Message édité par: como10, à: 10/05/19 07:38<br><br>Message édité par: como10, à: 10/05/19 07:39
Pièces jointes :

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

Plus d'informations
il y a 4 ans 10 mois #28898 par Philippe
correction sur mon/ton script

ici if ($user.\&quot;$_\&quot;.trim() -ne \&quot;\&quot;) { je testais pas si la valeur été null or il semble que quand un attribut est vide dans le CSV il prenne la valeur null -&gt;modifier

ici Set-ADUser $usersearch -Add @{$_ = $user.\&quot;$_\&quot;} quand il y a deja une valeur dans AD il refuse le add (il faut faire un replace) j'i fais un clear avant -&gt;probleme resolue

[code:1]Import-Module ActiveDirectory

$users = Import-Csv -Path C:\users\administrateur\Desktop\Modif_users.csv -delimiter \&quot;;\&quot;
$attribAD = \&quot;Department\&quot;, \&quot;Description\&quot;, \&quot;st\&quot;, \&quot;title\&quot;, \&quot;physicalDeliveryOfficeName\&quot;, \&quot;telephoneNumber\&quot;

foreach ($user in $users) {
$usersearch = Get-ADUser -Filter \&quot;samaccountname -eq '$($user.samaccountname)'\&quot;-Properties mail, department, Description, st, title, physicalDeliveryOfficeName, telephoneNumber

if ($usersearch -eq $null) {
write-host \&quot;l'utilisateur \&quot;$user.samaccountname\&quot; n'existe pas\&quot; -ForegroundColor Red
}
else {
$attribAD | foreach {
if ($user.\&quot;$_\&quot; -ne $null -and $user.\&quot;$_\&quot;.trim() -ne \&quot;\&quot;«») {
Set-ADUser $usersearch -Clear $_
Set-ADUser $usersearch -Add @{$_ = $user.\&quot;$_\&quot;}
}
else
{
Set-ADUser $usersearch -Clear $_
}
}
Write-Host \&quot;Compte modifié pour\&quot;$user.samaccountname\&quot;\&quot; -ForegroundColor green
}
}
[/code:1]

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

Plus d'informations
il y a 4 ans 10 mois #28899 par gaudefroy
Effectivement avec cette dernière modification cela fonctionne parfaitement.

Merci pour ton aide, je ne pense pas que j'aurai trouvé seul.

J'ai appris des choses que je ne connaissais pas. Notamment $_ (ca veut dire une dire une valeur variable ?)

Et donc la solution etait de supprimer la valeur dans le champ AD car -add ne supporte pas qu'il y ai deja une valeur dans l'attribut.
Si on avait fait un -replace au lieu de -add, aurait il fallu que l'on fasse un -clear auparavant ?

En tout cas Merci pour ton aide précieuse. Je ferai peut être encore appel à tes lumières à l'avenir.

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

Plus d'informations
il y a 4 ans 10 mois #28900 par Philippe

Et donc la solution etait de supprimer la valeur dans le champ AD car -add ne supporte pas qu'il y ai deja une valeur dans l'attribut.
Si on avait fait un -replace au lieu de -add, aurait il fallu que l'on fasse un -clear auparavant ?

non mais si l'attribut dans l'AD est vide tu aurra aussi une erreur

Notamment $_ (ca veut dire une dire une valeur variable ?)

non ça veut dire la valeur du pipeline. en faite c'est le signe du pipeline mais coucher :ohmy: :silly:

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

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