Question
Problème extraction donnée fichier xml
- jeffdu62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 7 ans 4 mois #22706
par jeffdu62
Problème extraction donnée fichier xml a été créé par jeffdu62
Bonjour,
j'ai un petit problème concernant un script que je suis entrain d'ecrire.
je dois extraire des données contenu dans un fichier xml afin de les utiliser pour différentes actions. j'ai écrit un script mais il ne boucle pas comme je le souhaite.
[code:1]$dossier=\"C:\Users\Desktop\TEST\"
#on charge l'xml afin de pouvoir l'utiliser
[xml]$xmlfile=Get-Content $dossier\DOCUMENTATION\Actions_INTEGRATION.xml
#suppression des dossiers vides
Get-ChildItem $dossier -recurse | where {$_.mode -like 'd*' } | where { @(gci $_.Fullname).count -eq 0} | remove-item
# on liste uniquement les répertoires Windows
$liste_dossier=Get-ChildItem $dossier -Filter *WINDOWS |where { @(gci $_.Fullname)}
write-host \"liste dossier=\" $liste_dossier
cd $dossier
#On boucle sur le nom des dossiers afin d'extraire les données issues du xml
foreach ($nom in $liste_dossier)
{
$y=Get-ChildItem $nom|where { @(gci $_.Fullname)}
[int]$p=1
foreach ($nom2 in $y)
{
write-host \"fichier dans le répertoire :\"$nom2
$NbSERVER=$xmlfile.livraison.$nom.$nom2.nbServeurCible
write-host 'Nombre de serveur dans fichier xml='$NbSERVER
if ($NbSERVER -gt 1)
{
write-host \" le nombre de serveur est supérieur à 1, on passe donc dans la boucle\"
$IP=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".IP
$NbDossier=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".nbDossier
Write-Host \"Dossier dans la boucle: \" $NbDossier
write-host \"SERVER :\" SERVER$p
write-host $IP
$p ++ -ige $NbSERVER
}
else
{
$IP=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".IP
$NbDossier=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".nbDossier
write-host \"dans le else IP:\" $IP
write-host \"dans le else NbDossier:\" $NbDossier
}
}
$IP
$NbDossier
write-host \"nbDossier2:\" $nbDossier
write-host \"Dossier:\" $IP
}[/code:1]
Le problème est que si dans mon fichier xml j'ai 2 serveurs, alors mon script ne boucle pas et je ne vois qu'un seul des 2 serveurs... je dois aussi effectuer cela si j'ai plusieurs dossiers contenu dans le fichier xml.
j'ai joint un bout de mon fichier xml qui me sert à faire des tests...si quelqu'un vois comment je peux m'en sortir?
<br><br>Message édité par: hutre, à: 1/12/16 16:41
j'ai un petit problème concernant un script que je suis entrain d'ecrire.
je dois extraire des données contenu dans un fichier xml afin de les utiliser pour différentes actions. j'ai écrit un script mais il ne boucle pas comme je le souhaite.
[code:1]$dossier=\"C:\Users\Desktop\TEST\"
#on charge l'xml afin de pouvoir l'utiliser
[xml]$xmlfile=Get-Content $dossier\DOCUMENTATION\Actions_INTEGRATION.xml
#suppression des dossiers vides
Get-ChildItem $dossier -recurse | where {$_.mode -like 'd*' } | where { @(gci $_.Fullname).count -eq 0} | remove-item
# on liste uniquement les répertoires Windows
$liste_dossier=Get-ChildItem $dossier -Filter *WINDOWS |where { @(gci $_.Fullname)}
write-host \"liste dossier=\" $liste_dossier
cd $dossier
#On boucle sur le nom des dossiers afin d'extraire les données issues du xml
foreach ($nom in $liste_dossier)
{
$y=Get-ChildItem $nom|where { @(gci $_.Fullname)}
[int]$p=1
foreach ($nom2 in $y)
{
write-host \"fichier dans le répertoire :\"$nom2
$NbSERVER=$xmlfile.livraison.$nom.$nom2.nbServeurCible
write-host 'Nombre de serveur dans fichier xml='$NbSERVER
if ($NbSERVER -gt 1)
{
write-host \" le nombre de serveur est supérieur à 1, on passe donc dans la boucle\"
$IP=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".IP
$NbDossier=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".nbDossier
Write-Host \"Dossier dans la boucle: \" $NbDossier
write-host \"SERVER :\" SERVER$p
write-host $IP
$p ++ -ige $NbSERVER
}
else
{
$IP=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".IP
$NbDossier=$xmlfile.livraison.$nom.$nom2.\"SERVER$p\".nbDossier
write-host \"dans le else IP:\" $IP
write-host \"dans le else NbDossier:\" $NbDossier
}
}
$IP
$NbDossier
write-host \"nbDossier2:\" $nbDossier
write-host \"Dossier:\" $IP
}[/code:1]
Le problème est que si dans mon fichier xml j'ai 2 serveurs, alors mon script ne boucle pas et je ne vois qu'un seul des 2 serveurs... je dois aussi effectuer cela si j'ai plusieurs dossiers contenu dans le fichier xml.
j'ai joint un bout de mon fichier xml qui me sert à faire des tests...si quelqu'un vois comment je peux m'en sortir?
La pièce jointe TEST.zip est absente ou indisponible
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 7 ans 4 mois #22714
par Philippe
Réponse de Philippe sur le sujet Re:Problème extraction donnée fichier xml
salut hutre
ton XML en exemple n'est pas très standard XML pour PowerShell !!
tu ne peut donc pas utilisé les commandes xml standard
je t'est fait un script allégé avec des nom de variable clair en utilisant une solution de contournement
si tu a besoin d'aide n'hésite pas
[code:1]
[xml]$xmlfile = Get-Content $dossier\test.xml
# premier niveau de ton fichier xml (APPLICATIF_WINDOWS dans ton fichier exemple et livraison dans ton code que tu donne)
$n1 = ($xmlfile | Get-Member -MemberType Properties).Name | where {$_ -ne \"xml\"}
foreach ($nomfichier in ($xmlfile.$n1 | Get-Member -MemberType Properties).Name | where {$_ -ne \"nbFichier\"}) {
write-host \"`n`rnom du fichier : $nomfichier\"
$NbSERVER = $xmlfile.$n1.$nomfichier.nbServeurCible
write-host \"Nombre de serveur pour ce fichier = $NbSERVER\"
foreach ($nomserveur in ($xmlfile.$n1.$nomfichier | Get-Member -MemberType Properties).Name | where {$_ -ne \"nbServeurCible\"}) {
write-host \"`tfichier dans le répertoire : \"$xmlfile.$n1.$nomfichier.$nomserveur.nbDossier
write-host \"`tip du serveur : \"$xmlfile.$n1.$nomfichier.$nomserveur.IP
write-host \"`tnom du serveur : \"$xmlfile.$n1.$nomfichier.$nomserveur.nom
write-host \"`tnom de l'utilisateur : $($xmlfile.$n1.$nomfichier.$nomserveur.user)\"
foreach ($nomdossier in ($xmlfile.$n1.$nomfichier.$nomserveur | Get-Member -MemberType Properties).Name | where {$_ -notin @(\"nbDossier\",\"IP\",\"nom\",\"user\"«»)}) {
write-host \"`t`tle répertoire : \"$xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.rep
write-host \"`t`tfichier distant : \"$xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.nomfichierdistant
write-host \"`t`tAction : $($xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.actionAeffectuer)`n`r\"
}
}
}[/code:1]<br><br>Message édité par: 6ratgus, à: 5/12/16 18:19
ton XML en exemple n'est pas très standard XML pour PowerShell !!
tu ne peut donc pas utilisé les commandes xml standard
je t'est fait un script allégé avec des nom de variable clair en utilisant une solution de contournement
si tu a besoin d'aide n'hésite pas
[code:1]
[xml]$xmlfile = Get-Content $dossier\test.xml
# premier niveau de ton fichier xml (APPLICATIF_WINDOWS dans ton fichier exemple et livraison dans ton code que tu donne)
$n1 = ($xmlfile | Get-Member -MemberType Properties).Name | where {$_ -ne \"xml\"}
foreach ($nomfichier in ($xmlfile.$n1 | Get-Member -MemberType Properties).Name | where {$_ -ne \"nbFichier\"}) {
write-host \"`n`rnom du fichier : $nomfichier\"
$NbSERVER = $xmlfile.$n1.$nomfichier.nbServeurCible
write-host \"Nombre de serveur pour ce fichier = $NbSERVER\"
foreach ($nomserveur in ($xmlfile.$n1.$nomfichier | Get-Member -MemberType Properties).Name | where {$_ -ne \"nbServeurCible\"}) {
write-host \"`tfichier dans le répertoire : \"$xmlfile.$n1.$nomfichier.$nomserveur.nbDossier
write-host \"`tip du serveur : \"$xmlfile.$n1.$nomfichier.$nomserveur.IP
write-host \"`tnom du serveur : \"$xmlfile.$n1.$nomfichier.$nomserveur.nom
write-host \"`tnom de l'utilisateur : $($xmlfile.$n1.$nomfichier.$nomserveur.user)\"
foreach ($nomdossier in ($xmlfile.$n1.$nomfichier.$nomserveur | Get-Member -MemberType Properties).Name | where {$_ -notin @(\"nbDossier\",\"IP\",\"nom\",\"user\"«»)}) {
write-host \"`t`tle répertoire : \"$xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.rep
write-host \"`t`tfichier distant : \"$xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.nomfichierdistant
write-host \"`t`tAction : $($xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.actionAeffectuer)`n`r\"
}
}
}[/code:1]<br><br>Message édité par: 6ratgus, à: 5/12/16 18:19
Connexion ou Créer un compte pour participer à la conversation.
- jeffdu62
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 7 ans 4 mois #22799
par jeffdu62
Réponse de jeffdu62 sur le sujet Re:Problème extraction donnée fichier xml
salut 6ratgus,
Désolé sur de la réponse tardive mais j'étais sur un autre sujet plus urgent.
Merci, je vais regarder tout ca au calme et revenir si j'ai des questions.
Désolé sur de la réponse tardive mais j'étais sur un autre sujet plus urgent.
Merci, je vais regarder tout ca au calme et revenir si j'ai des questions.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.066 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Problème extraction donnée fichier xml