Ce code:Mise à jour élément de tableau dans le document xml
$test = @"
<Test>
<Child>Hello</Child>
<Child>World</Child>
</Test>
"@
$xml = [xml]$test
$xml.Test.Child[1]
rendements:
World
Ensuite ce code:
$xml.Test.Child[1] = "StackOVerflow"
$xml.InnerXml
rendements:
<Test><Child>Hello</Child><Child>World</Child></Test>
Pourquoi le deuxième noeud Child
n'est pas mis à jour de World
à StackOverflow
?
D'accord, nous allons essayer quelque chose de différent:
$ipaddress=([System.Net.DNS]::GetHostAddresses($hostname)|Where-Object {$_.AddressFamily -eq "InterNetwork"} | select-object IPAddressToString)[0].IPAddressToString
Maintenant, je me demande ce que le type de $ipaddress
est:
$ipaddress.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
Apparemment, c'est la chaîne.
$xml.Test.ChildNodes[1].'#text' = $ipaddress
Cannot set "#text" because only strings can be used as values to set XmlNode properties.
At line:1 char:1
+ $xml.Test.ChildNodes[1].'#text' = $ipaddress
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueException
+ FullyQualifiedErrorId : XmlNodeSetShouldBeAString
Mais $ipaddress
est la chaîne!
Cela fonctionne enfin:
$xml.Test.ChildNodes[1].'#text' = [string]$ipaddress
Que se passe-t-il?
Même comportement sur PowerShell 6.0.0-alpha.13 –
vous pour cette Merci, mais comme vous avez sans doute remarqué, je l'ai posté le même travail autour de la question originale elle-même. –