2017-12-15 4 views
-1

Ich möchte jede Zeile der XML-Datei in PowerShell-Skript lesen. Nach Get-Content der XML-Datei habe ich foreach Anweisung verwendet, um jedes Linienelement zu lesen. und es hat nicht funktioniert. Wie lese ich jede Zeile der XML-Datei?Lesen Sie jede Zeile der XML-Datei

Test.xml:

<?xml version="1.0" encoding="utf-8"?> 
<Install-Plan> 
    <ADSetup> ... </ADSetup> 
    <SQLSetup> 
     <SqlServerName>ServerName</SqlServerName> 
     <SqlVersion>SQL2014</SqlVersion> 
     <InstanceName>MSSQLSERVER</InstanceName> 
     <SqlInstall>TRUE</SqlInstall> 
     <SqlClientInstall>TRUE</SqlClientInstall> 
     <RSInstall>TRUE</RSInstall> 
     ... 
    </SQLSetup> 
</Install-Plan> 

Powershell:

[xml]$XmlData = Get-Content test.xml -ErrorAction Stop 
$Config = $xmlData.SelectNodes("//Install-Plan"); 
$uConfigFile = $Config.CommonConfig.SQLSetup 
foreach ($uconfigval in $uConfigFile) { 
    switch ($uconfigval[0]) { 
     "$SQLServerData.SQLSetup.Sqlserver" {$uSQL_SERVER_NAME = $uconfigVal.Trim()} 
     "$SQLServerData.SQLSetup.SqlVersion" {$uSQLVERSION = $uconfigVal[1].Trim()} 
     ... 
    } 
+2

Ihre Frage ist sehr vage und enthält keine tatsächlichen so haben wir keine Ahnung, was oder wie, du versuchst zu tun. Sie müssen wirklich lesen [How to Ask] (http://stackoverflow.com/questions/how-to-ask). –

+0

Bitte fügen Sie Ihre Codes hier hinzu. Was immer du bis jetzt versucht hast. – Billa

+0

Ich mache mir nur Gedanken über den SqlSetup-Abschnitt von xml und habe das Gleiche in eine Array-Variable gelesen und versucht, foreach in die Variable uconfigval von jeder Zeile einzufügen und jeder Variable zuzuordnen. – Jyothi

Antwort

0

Die XML-Beispiel Sie hat geschrieben keinen Knoten <CommonConfig> haben, so wird $uConfigFile = $Config.CommonConfig.SQLSetup ein leeres Ergebnis. Außerdem sind die Variablen und Bedingungen Ihrer switch Anweisung vollständig deaktiviert.

Was Sie eigentlich tun möchte etwas wie folgt aus:

foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) { 
    switch ($node.Name) { 
     'SqlServerName' { $uSQL_SERVER_NAME = $node.InnerText.Trim() } 
     'SqlVersion' { $uSQLVERSION = $node.InnerText.Trim() } 
     ... 
    } 
} 

oder (vielleicht besser) füllen eine Hash-Tabelle anstatt einzelne Variablen:

$cfg = @{} 
foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) { 
    $cfg[$node.Name] = $node.InnerText.Trim() 
} 
Verwandte Themen