Question
[RESOLU] multiple sous-noeud fichier XML
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 9 mois #9733
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:multiple sous-noeud fichier XML
DragoonMaster écrit:
DragoonMaster écrit:
[code:1]
<discover version=\"1.0\">
<switchs>
<switch>
<name>0</name>
<address>0</address>
<version>0</version>
<interfaces>
<interface>
<desc>0</desc>
<type>0</type>
<speed>0</speed>
<mac>0</mac>
<adminstatus>0</adminstatus>
<operstatus>0</operstatus>
</interface>
</interfaces>
</switch>
</switchs>
</discover>
[/code:1]
Du coup, on reprend les mêmes et on recommence :
[code:1]
function add-Switch($xmlfile)
{
[XML]$Data=GC $xmlfile
$Node=switch (@($Data.discover.switchs.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($Data.discover.switchs.switch,$true)}
{ $_ -ge 2} {$Data.ImportNode($Data.discover.switchs.switch[0],$true)}
}
$AddedNode=$Data.discover.switchs.AppendChild($Node)
$Data.Save($xmlfile)
}
[/code:1]
Mais là, le code doit être modifié.
Oui, je n'ai pas modifié la fonction Create-templateMais du coup, m'est il possible de CREER une \"instance\" discover ?
DragoonMaster écrit:
Effectivement je n'ai pas compris, car à la lecture de ton premier exemple switch n'est pas une collection, il faut donc la créer :Le but etant de pouvoir, a l'appel de la fonction, RAJOUTER un noeud discover/switch.
[code:1]
<discover version=\"1.0\">
<switchs>
<switch>
<name>0</name>
<address>0</address>
<version>0</version>
<interfaces>
<interface>
<desc>0</desc>
<type>0</type>
<speed>0</speed>
<mac>0</mac>
<adminstatus>0</adminstatus>
<operstatus>0</operstatus>
</interface>
</interfaces>
</switch>
</switchs>
</discover>
[/code:1]
Du coup, on reprend les mêmes et on recommence :
[code:1]
function add-Switch($xmlfile)
{
[XML]$Data=GC $xmlfile
$Node=switch (@($Data.discover.switchs.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($Data.discover.switchs.switch,$true)}
{ $_ -ge 2} {$Data.ImportNode($Data.discover.switchs.switch[0],$true)}
}
$AddedNode=$Data.discover.switchs.AppendChild($Node)
$Data.Save($xmlfile)
}
[/code:1]
Mais là, le code doit être modifié.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 14 ans 9 mois #9734
par Arnaud
Réponse de Arnaud sur le sujet Re:multiple sous-noeud fichier XML
J'ai du mal modifier mon code, car lors de l'ajout d'une interface, il me créer automatiquement un nouveau switch (ce qui créer des switchs pour rien), mais je relis mon code encore et encore, sans trouvé pourquoi ces ajouts intempestifs :
[code:1]
function Create-template($filename)
{
$template = \"
<discover version='1.0'>
<switchs>
<switch>
<name>0</name>
<address>0</address>
<version>0</version>
<interfaces>
<interface>
<desc>0</desc>
<type>0</type>
<speed>0</speed>
<mac>0</mac>
<adminstatus>0</adminstatus>
<operstatus>0</operstatus>
</interface>
</interfaces>
</switch>
</switchs>
</discover>\"
$template | Out-File $filename
}
Create-template $xmlfile
function add-switch($xmlfile,$name,$address,$version)
{
[XML]$Data=GC $xmlfile
$Node=switch (@($Data.discover.switchs.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($Data.discover.switchs.switch,$true)}
{ $_ -ge 2} {$Data.ImportNode($Data.discover.switchs.switch[0],$true)}
}
$AddedNode=$Data.discover.switchs.AppendChild($Node)
$AddedNode.name = $name
$AddedNode.address = $address
$AddedNode.version = $version
$Data.Save($xmlfile)
}
function add-interface($xmlfile,$desc,$type,$speed,$mac,$adminstatus,$operstatus)
{
[XML]$Data=GC $xmlfile
$SNode=switch (@($Data.discover.switchs.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($Data.discover.switchs.switch,$true)}
{ $_ -ge 2} {$Data.ImportNode($Data.discover.switchs.switch[0],$true)}
}
$SwitchNode=$Data.discover.switchs.AppendChild($SNode)
$Node=switch (@($SwitchNode.interfaces.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($SwitchNode.interfaces.interface,$true)}
{ $_ -ge 2} {$Data.ImportNode($SwitchNode.interfaces.interface[0],$true)}
}
$newNode=$SwitchNode.interfaces.AppendChild($Node)
$newNode.desc = [string]$desc # Methode \"AppendChild\" needs to have a string to set XmlNode properties
$newNode.type = [string]$type
$newNode.speed = [string]$speed
$newNode.mac = [string]$mac
$newNode.adminstatus = [string]$adminstatus
$newNode.operstatus = [string]$operstatus
$Data.Save($xmlfile)
}
###############################
add-switch $xmlfile \"name\" \"address\" \"version\"
add-interface $xmlfile 1 1 1 1 1 1
#add-interface $xmlfile 12 12 12 12 12 12
add-switch $xmlfile \"name2\" \"address2\" \"version2\"
#add-interface $xmlfile 13 13 13 13 13 13
#add-interface $xmlfile \"name2\" \"address2\" \"version2\" 12 12 12 12 12 12
add-switch $xmlfile \"name3\" \"address3\" \"version3\"
[/code:1]
J'ai bien pris soin d'ajouter un nouveau noeud de type $SwitchNode, mais je ne vois pas ou j'en créer un de trop, à la place de simplement l'atteindre.
Un .count() de trop ?
[code:1]
function Create-template($filename)
{
$template = \"
<discover version='1.0'>
<switchs>
<switch>
<name>0</name>
<address>0</address>
<version>0</version>
<interfaces>
<interface>
<desc>0</desc>
<type>0</type>
<speed>0</speed>
<mac>0</mac>
<adminstatus>0</adminstatus>
<operstatus>0</operstatus>
</interface>
</interfaces>
</switch>
</switchs>
</discover>\"
$template | Out-File $filename
}
Create-template $xmlfile
function add-switch($xmlfile,$name,$address,$version)
{
[XML]$Data=GC $xmlfile
$Node=switch (@($Data.discover.switchs.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($Data.discover.switchs.switch,$true)}
{ $_ -ge 2} {$Data.ImportNode($Data.discover.switchs.switch[0],$true)}
}
$AddedNode=$Data.discover.switchs.AppendChild($Node)
$AddedNode.name = $name
$AddedNode.address = $address
$AddedNode.version = $version
$Data.Save($xmlfile)
}
function add-interface($xmlfile,$desc,$type,$speed,$mac,$adminstatus,$operstatus)
{
[XML]$Data=GC $xmlfile
$SNode=switch (@($Data.discover.switchs.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($Data.discover.switchs.switch,$true)}
{ $_ -ge 2} {$Data.ImportNode($Data.discover.switchs.switch[0],$true)}
}
$SwitchNode=$Data.discover.switchs.AppendChild($SNode)
$Node=switch (@($SwitchNode.interfaces.GetEnumerator()).count)
{
0 {Throw \"Impossible de créer un noeud dont le contenu est inconnu\"}
1 {$Data.ImportNode($SwitchNode.interfaces.interface,$true)}
{ $_ -ge 2} {$Data.ImportNode($SwitchNode.interfaces.interface[0],$true)}
}
$newNode=$SwitchNode.interfaces.AppendChild($Node)
$newNode.desc = [string]$desc # Methode \"AppendChild\" needs to have a string to set XmlNode properties
$newNode.type = [string]$type
$newNode.speed = [string]$speed
$newNode.mac = [string]$mac
$newNode.adminstatus = [string]$adminstatus
$newNode.operstatus = [string]$operstatus
$Data.Save($xmlfile)
}
###############################
add-switch $xmlfile \"name\" \"address\" \"version\"
add-interface $xmlfile 1 1 1 1 1 1
#add-interface $xmlfile 12 12 12 12 12 12
add-switch $xmlfile \"name2\" \"address2\" \"version2\"
#add-interface $xmlfile 13 13 13 13 13 13
#add-interface $xmlfile \"name2\" \"address2\" \"version2\" 12 12 12 12 12 12
add-switch $xmlfile \"name3\" \"address3\" \"version3\"
[/code:1]
J'ai bien pris soin d'ajouter un nouveau noeud de type $SwitchNode, mais je ne vois pas ou j'en créer un de trop, à la place de simplement l'atteindre.
Un .count() de trop ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 9 mois #9736
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:multiple sous-noeud fichier XML
Add-Interface ne doit pas créer de noeud de type switch et surtout, maintenant ton code doit savoir sur quel noeud, de type switch, ajouter l'interface...
Tu viens juste de rentrer dans l'auberge XML, reste à savoir quand tu vas en sortir
Tu viens juste de rentrer dans l'auberge XML, reste à savoir quand tu vas en sortir
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 14 ans 9 mois #9766
par Arnaud
Réponse de Arnaud sur le sujet Re:multiple sous-noeud fichier XML
Finalement, pour allez au plus simple, j'ecris manuellement le fichier ...
[code:1]
$stream = [System.IO.StreamWriter] $strXml
function Create-Stream()
{
$stream.WriteLine(\"<discover version='1.0'>\"«»)
$stream.WriteLine('<switchs>')
}
function Add-Stream($strTarget, $strCommunity)
{
write-host '[DEBUG] Pinging' $strTarget '...'
if ( ($ping.Send($strTarget, 10)).Status -eq 'Success')
{
write-host '[DEBUG] Starting discover' $strTarget
$switch = (get-switch $strTarget $strCommunity)
if ($switch.gettype().Name -like 'Hashtable')
{
$stream.WriteLine('<switch>')
display-hashtable $switch
$stream.WriteLine('<interfaces>')
display-interface (get-cdp-infos $strTarget $strCommunity)
$stream.WriteLine('</interfaces>')
$stream.WriteLine('</switch>')
}
else
{
write-host \"[DEBUG] No SNMP info can be reached for\" $strTarget
}
}
write-host '[DEBUG] Ending discover' $strTarget
}
function Close-Stream()
{
$stream.WriteLine('</switchs>')
$stream.WriteLine('</discover>')
$stream.close()
}
Create-Stream
Add-Stream $strTarget $strCommunity
Close-Stream
[/code:1]
Merci encore !<br><br>Message édité par: DragoonMaster, à: 9/06/11 10:55
[code:1]
$stream = [System.IO.StreamWriter] $strXml
function Create-Stream()
{
$stream.WriteLine(\"<discover version='1.0'>\"«»)
$stream.WriteLine('<switchs>')
}
function Add-Stream($strTarget, $strCommunity)
{
write-host '[DEBUG] Pinging' $strTarget '...'
if ( ($ping.Send($strTarget, 10)).Status -eq 'Success')
{
write-host '[DEBUG] Starting discover' $strTarget
$switch = (get-switch $strTarget $strCommunity)
if ($switch.gettype().Name -like 'Hashtable')
{
$stream.WriteLine('<switch>')
display-hashtable $switch
$stream.WriteLine('<interfaces>')
display-interface (get-cdp-infos $strTarget $strCommunity)
$stream.WriteLine('</interfaces>')
$stream.WriteLine('</switch>')
}
else
{
write-host \"[DEBUG] No SNMP info can be reached for\" $strTarget
}
}
write-host '[DEBUG] Ending discover' $strTarget
}
function Close-Stream()
{
$stream.WriteLine('</switchs>')
$stream.WriteLine('</discover>')
$stream.close()
}
Create-Stream
Add-Stream $strTarget $strCommunity
Close-Stream
[/code:1]
Merci encore !<br><br>Message édité par: DragoonMaster, à: 9/06/11 10:55
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [RESOLU] multiple sous-noeud fichier XML