我想在 PowerShell 脚本中读取 XML 文件的每一行。在Get-Content
XML 文件之后,我使用foreach
语句来读取每个行元素。它不起作用。如何读取 XML 文件的每一行?
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>
电源外壳:
[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()}
...
}
您发布的示例 XML 没有 node <CommonConfig>
,因此$uConfigFile = $Config.CommonConfig.SQLSetup
将产生空结果。此外,您switch
语句的变量和条件完全关闭。
你真正想做的是这样的:
foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) {
switch ($node.Name) {
'SqlServerName' { $uSQL_SERVER_NAME = $node.InnerText.Trim() }
'SqlVersion' { $uSQLVERSION = $node.InnerText.Trim() }
...
}
}
或者(也许更好)填充哈希表而不是单个变量:
$cfg = @{}
foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) {
$cfg[$node.Name] = $node.InnerText.Trim()
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句