Question [RESOLU] multiple sous-noeud fichier XML

Plus d'informations
il y a 14 ans 9 mois #9733 par Laurent Dardenne
DragoonMaster écrit:

Mais du coup, m'est il possible de CREER une \"instance\" discover ?

Oui, je n'ai pas modifié la fonction Create-template
DragoonMaster écrit:

Le but etant de pouvoir, a l'appel de la fonction, RAJOUTER un noeud discover/switch.

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 :
[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.

Plus d'informations
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 ?

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

Plus d'informations
il y a 14 ans 9 mois #9736 par Laurent Dardenne
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 :P

Tutoriels PowerShell

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

Plus d'informations
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

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

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