Question [EDIT]Script de MAJ l'AD par des fichiers XML

Plus d'informations
il y a 14 ans 2 mois #11311 par Loris
EDIT : Voir plus bas
_______________________

Bonjour,

Je suis débutant en PowerShell et j'ai un problème.

[code:1]$xmldata = [xml] (Get-Content c:\test.xml)
$user = [ADSI] 'LDAP://CN=$xml.data.utilisateur.login, CN=Users, DC=test, DC=local'
$user.Put('sn', $xml.data.utilisateur.prenom)
...
$user.SetInfo()[/code:1]

Donc lorsque je remplace $xml.data.utilisateur.login par un login d'employé qui existe (exemple Employe1) tout se met à jour correctement.
Quand j'affiche mon $xml.data.utilisateur.login il m'affiche bien Employe1.
Mais dans mon code tel qu'elle ca bug ! Il ne lit pas le login apparemment, ou je ne sais pas
Je dois avoir une erreur de synthaxe je pense..
Merci de bien vouloir m'aider

Message édité par: Santa, à: 15/03/12 07:39<br><br>Message édité par: Santa, à: 15/03/12 07:40

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

Plus d'informations
il y a 14 ans 2 mois #11316 par Matthew BETTON
Bonjour,

Il faut bien comprendre la différence entre simples quotes et doubles quotes.

Ton problème dois en premier lieu venir de cette ligne de code :

[code:1]$user = [ADSI] 'LDAP://CN=$xml.data.utilisateur.login, CN=Users, DC=test, DC=local'[/code:1]

Entre simples quotes, les variables ne sont pas interprétées. Aussi, dans ton cas, il s'agit de la propriété d'un objet.

Une première solution :

[code:1]$login = $xml.data.utilisateur.login
$user = [ADSI] \&quot;LDAP://CN=$Login, CN=Users, DC=test, DC=local\&quot;[/code:1]

Une seconde solution :

[code:1]$user = [ADSI] \&quot;LDAP://CN=$($xml.data.utilisateur.login), CN=Users, DC=test, DC=local\&quot;[/code:1]

Tests et dis nous si cela fonctionne mieux.

@ +

Matthew<br><br>Message édité par: Matthew BETTON, à: 13/03/12 19:56

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

Plus d'informations
il y a 14 ans 2 mois #11320 par Loris
Réponse de Loris sur le sujet Re:Problème variable dans LDAP
La 1ère solution est la bonne ! Ca fonctionne bien, mais on me dit que ma solution n'est pas la seule, il y aurait une solution avec un get qui lit le xml et un set qui entre les données dans l'Active Directory. Je vais essayer de trouver également cette solution !

Merci beaucoup pour votre aide.<br><br>Message édité par: Santa, à: 14/03/12 07:43

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

Plus d'informations
il y a 14 ans 2 mois #11321 par Matthew BETTON
Bonjour,

Pourquoi pas un fichier csv plutôt qu'un fichier xml ?

Une méthode décrite dans cette présentation de PowerShell (Microsoft TechDays 2011 / Arnaud PETITJEAN et Jacques BARATHON).

Voir notamment vers la 49 ème / 50 ème minute. Mais je te conseille de tout regarder car toute la session est intéressante (et en plus, en Français !).

La Cmdlet 'New-ADUser' accepte l'entrée de pipeline sur ses paramètres. Il suffit simplement que tous les intitulés de colonne, dans ton fichier CSV, correspondent au nom du paramètre attendu.

@ +

Matthew

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

Plus d'informations
il y a 14 ans 2 mois #11322 par Loris
Réponse de Loris sur le sujet Re:Problème variable dans LDAP
Et bien en faite j'ai une page intranet sur un web serveur qui affiche des informations Active Directory de compte clients. On peu y modifier les informations.

Etant donné que je suis en stage, j'ai reçu comme consigne de stocker les modifications dans un fichier XML. Ensuite, créer mon script qui parcourera le répertoire \&quot;xml update\&quot; pour lire les fichiers 1 par 1 et mettre à jour l'Active Directory, mais aussi les déplacer une fois lu dans un répertoire \&quot;archive xml\&quot;.

Merci pour la vidéo je vais essayer de la regarder tout de suite !<br><br>Message édité par: Santa, à: 14/03/12 08:22

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

Plus d'informations
il y a 14 ans 2 mois #11327 par Loris
Réponse de Loris sur le sujet Re:Problème variable dans LDAP
Donc j'ai modifié mon code

[code:1]$i = (Dir \\Win-webserver\m\*.xml).Count
For($j=0; $j -lt $i; $j++)
{
$tableauFichiers = Get-Childitem \\Win-Webserver\m\*.xml
$plusAncien = get-date
foreach ($tmp in $tableauFichiers)
{
if ([system.dateTime]::Compare($tmp.CreationTime, $plusAncien) -lt 0)
{
$plusVieuxFichier = $tmp;
$plusAncien = $plusVieuxFichier.CreationTime
}
}
$nom = $plusVieuxFichier.Name
$xmldata = [xml] (Get-Content \\Win-Webserver\m\$nom)
$login = $xmldata.utilisateur.login
$user = [ADSI] \&quot;LDAP://CN=$login, CN=Users, DC=solidaris, DC=local\&quot;
$user.Put('sn', $xmldata.utilisateur.nom)
$user.Put('givenName', $xmldata.utilisateur.prenom)
$user.Put('telephoneNumber', $xmldata.utilisateur.telephone)
$user.Put('mail', $xmldata.utilisateur.email)
$user.Put('company', $xmldata.utilisateur.companie)
$user.Put('department', $xmldata.utilisateur.departement)
$user.Put('Description', $xmldata.utilisateur.description)
$user.SetInfo()
Move-Item \\Win-Webserver\m\$nom c:\archive_xml
}[/code:1]

Je voudrais procéder comme cela :
1) Compter nombres d'éléments présent dans le dossier
2) Exécutez une boucle qui se répète autant de fois qu'il y a d'élements
3) Sélectionner le fichier le plus ancien dans le dossier
4) Mettre à jour dans l'Active Directory le fichier XML le plus ancien
5) Déplacer le fichier XML dans un dossier archive_xml

Mais il y a un problème.. si vous pouvez m'aider merci

Message édité par: Santa, à: 14/03/12 14:38<br><br>Message édité par: Santa, à: 14/03/12 15:23

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

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