Question Problème extraction donnée fichier xml

Plus d'informations
il y a 7 ans 4 mois #22706 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?

La pièce jointe TEST.zip est absente ou indisponible

<br><br>Message édité par: hutre, à: 1/12/16 16:41
Pièces jointes :

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

Plus d'informations
il y a 7 ans 4 mois #22714 par Philippe
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 \&quot;xml\&quot;}
foreach ($nomfichier in ($xmlfile.$n1 | Get-Member -MemberType Properties).Name | where {$_ -ne \&quot;nbFichier\&quot;}) {
write-host \&quot;`n`rnom du fichier : $nomfichier\&quot;
$NbSERVER = $xmlfile.$n1.$nomfichier.nbServeurCible
write-host \&quot;Nombre de serveur pour ce fichier = $NbSERVER\&quot;

foreach ($nomserveur in ($xmlfile.$n1.$nomfichier | Get-Member -MemberType Properties).Name | where {$_ -ne \&quot;nbServeurCible\&quot;}) {
write-host \&quot;`tfichier dans le répertoire : \&quot;$xmlfile.$n1.$nomfichier.$nomserveur.nbDossier
write-host \&quot;`tip du serveur : \&quot;$xmlfile.$n1.$nomfichier.$nomserveur.IP
write-host \&quot;`tnom du serveur : \&quot;$xmlfile.$n1.$nomfichier.$nomserveur.nom
write-host \&quot;`tnom de l'utilisateur : $($xmlfile.$n1.$nomfichier.$nomserveur.user)\&quot;

foreach ($nomdossier in ($xmlfile.$n1.$nomfichier.$nomserveur | Get-Member -MemberType Properties).Name | where {$_ -notin @(\&quot;nbDossier\&quot;,\&quot;IP\&quot;,\&quot;nom\&quot;,\&quot;user\&quot;«»)}) {
write-host \&quot;`t`tle répertoire : \&quot;$xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.rep
write-host \&quot;`t`tfichier distant : \&quot;$xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.nomfichierdistant
write-host \&quot;`t`tAction : $($xmlfile.$n1.$nomfichier.$nomserveur.$nomdossier.actionAeffectuer)`n`r\&quot;
}
}
}[/code:1]<br><br>Message édité par: 6ratgus, à: 5/12/16 18:19

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

Plus d'informations
il y a 7 ans 4 mois #22799 par jeffdu62
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.

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

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