尝试从XML文档收集服务器和环境信息.但是,当我使用foreach循环迭代文档时,它返回树中的两个节点,而不是一次返回一个节点.
[xml]$xmlDoc = [xml](Get-Content("C:\temp\compareVHD_info.xml"))
foreach($env in $xmlDoc.pvs.env)
{
if($env -eq "prod")
{ do stuff}
}
Run Code Online (Sandbox Code Playgroud)
XML:
<pvs>
<env>
<prod>
<primaryServer>
<name>name</name>
<storePath>path</storePath>
</primaryServer>
<secondaryServer>
<name>name</name>
<storePath>path</storePath>
</secondaryServer>
</prod>
<nonProd>
<primaryServer>
<name>name</name>
<storePath>path</storePath>
<storePath>path</storePath>
<storePath>path</storePath>
<storePath>path</storePath>
</primaryServer>
<secondaryServer>
<name>name</name>
<storePath>path</storePath>
<storePath>path</storePath>
<storePath>path</storePath>
<storePath>path</storePath>
</secondaryServer>
</nonProd>
</env>
</pvs>
Run Code Online (Sandbox Code Playgroud)
我正在尝试收集主要和辅助服务器名称,存储路径和存储路径.但是,当我使用上面的代码时,它会在$ env变量中返回"prod nonProd"
在此先感谢您的帮助!
您发布的代码不可能正常工作.您的XML数据只有一个<env>节点,因此您的循环遍历具有2个属性(prod和nonProd)的单个对象,因此检查$env -eq "prod"将始终评估为$false.您真正想要的是选择<primaryServer>和/或<secondaryServer>节点并输出其子节点的值.
[xml]$xml = Get-Content 'C:\path\to\input.xml'
$xml.SelectNodes('//prod/primaryServer') | ForEach-Object {
New-Object -Type PSObject -Property @{
Name = $_.name
Path = $_.storePath -join ';'
}
} | Export-Csv 'C:\path\to\output.csv' -NoType
Run Code Online (Sandbox Code Playgroud)
如果你想原发性和继发性在同一个文件修改XPath表达式的东西一样//prod/*[self::primaryServer or self::secondaryServer],如果有其他兄弟节点为好,或者只是//prod/*如果这些是唯一的子节点<prod>.
| 归档时间: |
|
| 查看次数: |
7184 次 |
| 最近记录: |