Xml PowerShell:找到父节点并编辑子节点

Xml PowerShell:找到父节点并编辑子节点,xml,powershell,Xml,Powershell,我有一个包含0到n个节点的给定XML文件,名为。我想找到包含值“VRS_TacPack”的子节点“Name”的“”节点。如果发现,我需要编辑子节点“Disabled”和“ManualLoad”,然后将更改后的XML文件写回 给定XML文件的结构: <?xml version="1.0" encoding="Windows-1252"?> <SimBase.Document Type="Launch" version=&

我有一个包含0到n个节点的给定XML文件,名为。我想找到包含值“VRS_TacPack”的子节点“Name”的“”节点。如果发现,我需要编辑子节点“Disabled”和“ManualLoad”,然后将更改后的XML文件写回

给定XML文件的结构:

<?xml version="1.0" encoding="Windows-1252"?>
<SimBase.Document Type="Launch" version="1,0">
  ...
  <Launch.Addon>
    <Name>BlaBlaBla</Name>
    ...
  </Launch.Addon>
  <Launch.Addon>
    <Name>VRS_TacPack</Name>
    <Disabled>True</Disabled>
    <ManualLoad>False</ManualLoad>
    <Path>Modules\VRS_TacPack\VRS_TacPack.dll</Path>
  </Launch.Addon>
  <Launch.Addon>
    <Name>BluBluBlu</Name>
    ...
  </Launch.Addon>
  ...
</SimBase.Document>

...
喋喋不休
...
VRS_TacPack
真的
假的
模块\VRS\u TacPack\VRS\u TacPack.dll
布鲁
...
...
读写XML文件没有问题,但由于我不知道如何在XML结构中导航,所以我所有使用示例来解决这个问题的尝试都失败了

脚本的当前状态

# Set up new XML object and read DLL.XML file content
$xmlDll  = New-Object System.XML.XMLDocument
$xmlDll.Load($tacPackFileSpec)
    
# Get the <Launch.Addon> node with child node <Name> contains 'VRS_TacPack'
???
    
# Output modified DLL.XML file
$xmlDll.Save($tacPackFileSpec)
#设置新的XML对象并读取DLL.XML文件内容
$xmlDll=New Object System.XML.XMLDocument
$xmlDll.Load($tacPackFileSpec)
#获取子节点包含“VRS\u TacPack”的节点
???
#输出修改后的DLL.XML文件
$xmlDll.Save($tacPackFileSpec)
非常感谢您的帮助或提示
汉内斯给你两个选择:

[xml]$xml = @"
<?xml version="1.0" encoding="Windows-1252"?>
<SimBase.Document Type="Launch" version="1,0">
  <Launch.Addon>
    <Name>BlaBlaBla</Name>
  </Launch.Addon>
  <Launch.Addon>
    <Name>VRS_TacPack</Name>
    <Disabled>True</Disabled>
    <ManualLoad>False</ManualLoad>
    <Path>Modules\VRS_TacPack\VRS_TacPack.dll</Path>
  </Launch.Addon>
  <Launch.Addon>
    <Name>BluBluBlu</Name>
  </Launch.Addon>
</SimBase.Document>
"@
使用“虚线”属性(不区分大小写)


非常感谢西奥的快速回答。我使用了“虚线”版本,因为它测试的是相等的。
$xml.SelectNodes("//Launch.Addon/Name[contains(text(), 'VRS_TacPack')]") | ForEach-Object {
    $_.ParentNode.Disabled   = 'False'
    $_.ParentNode.ManualLoad = 'True'
}

$xml.Save("D:\Test\blah.xml")
# need to quote the element names because of the '.'
$xml.'SimBase.Document'.'Launch.Addon' | Where-Object { $_.Name -eq 'VRS_TacPack' } | ForEach-Object {
    $_.Disabled   = 'False'
    $_.ManualLoad = 'True'
}
$xml.Save("D:\Test\blah.xml")