web-dev-qa-db-fra.com

Script Powershell pour mettre à jour le contenu d'un fichier XML

Aidez-moi à créer un script Powershell qui passera par un fichier XML et mettra à jour le contenu. Dans l'exemple ci-dessous, je souhaite utiliser le script pour extraire et modifier le chemin du fichier dans l'exemple Config.button.command. Modifiez C:\Prog\Laun.jar en C:\Prog32\folder\test.jar. S'il vous plaît aider. Merci.

<config>
 <button>
  <name>Spring</name>
  <command>
     C:\sy32\Java.exe -jar "C:\Prog\Laun.jar" YAHOO.COM --type SPNG --port 80
  </command>
  <desc>studies</desc>
 </button>
 <button>
  <name>JET</name>
    <command>
       C:\sy32\Java.exe -jar "C:\Prog\Laun.jar" YAHOO.COM --type JET --port 80
    </command>
  <desc>school</desc>
 </button>
</config>
11
user2359932

Vous avez deux solutions. Vous pouvez le lire en tant que XML et remplacer le texte, comme ceci:

#using xml
$xml = [xml](Get-Content .\test.xml)
$xml.SelectNodes("//command") | % { 
    $_."#text" = $_."#text".Replace("C:\Prog\Laun.jar", "C:\Prog32\folder\test.jar") 
    }

$xml.Save("C:\Users\graimer\Desktop\test.xml")

Ou vous pourriez faire la même chose beaucoup plus simplement et rapidement en utilisant un simple remplacement de chaîne, comme s'il s'agissait d'un fichier texte normal. Je recommanderais ceci. Ex:

#using simple text replacement
$con = Get-Content .\test.xml
$con | % { $_.Replace("C:\Prog\Laun.jar", "C:\Prog32\folder\test.jar") } | Set-Content .\test.xml
19
Frode F.

Je sais que ceci est un ancien post mais cela peut aider les autres alors ...

Si vous connaissez spécifiquement les éléments que vous recherchez, vous pouvez simplement spécifier l'élément de la manière suivante:

# Read the existing file
[xml]$xmlDoc = Get-Content $xmlFileName

# If it was one specific element you can just do like so:
$xmlDoc.config.button.command = "C:\Prog32\folder\test.jar"
# however this wont work since there are multiple elements

# Since there are multiple elements that need to be 
# changed use a foreach loop
foreach ($element in $xmlDoc.config.button)
{
    $element.command = "C:\Prog32\folder\test.jar"
}

# Then you can save that back to the xml file
$xmlDoc.Save("c:\savelocation.xml")
7
ThisWholeDev

Essaye ça:

$xmlFileName = "c:\so.xml"
$match = "C:\\Prog\\Laun\.jar"
$replace = "C:\Prog32\folder\test.jar"


# Create a XML document
[xml]$xmlDoc = New-Object system.Xml.XmlDocument

# Read the existing file
[xml]$xmlDoc = Get-Content $xmlFileName

$buttons = $xmlDoc.config.button
$buttons | % { 
    "Processing: " + $_.name + " : " + $_.command
    $_.command = $_.command -Replace $match, $replace
    "Now: " + $_.command
    }

"Complete, saving"
$xmlDoc.Save($xmlFileName)
1
Stuart Whelan