使用PowerShell更新XML文件

使用PowerShell更新XML文件,xml,powershell,Xml,Powershell,我正在使用PowerShell跨多个服务器更新应用程序的XML目录列表,但实际更新时遇到问题。以下面的XML为例,希望使用qualnas1更新文件路径,以使用\GlobalNAS…等内容并删除qualnas2条目 <?xml version="1.0" encoding="UTF-8" ?> <directory> <filepath>\\qualnas1\library\content</filepath> <filepat

我正在使用PowerShell跨多个服务器更新应用程序的XML目录列表,但实际更新时遇到问题。以下面的XML为例,希望使用qualnas1更新文件路径,以使用\GlobalNAS…等内容并删除qualnas2条目

<?xml version="1.0" encoding="UTF-8" ?>
<directory>
    <filepath>\\qualnas1\library\content</filepath>
    <filepath>\\qualnas2\library\content</filepath>
    <filepath type="sssb">\\qualnas1\SSSB\content</filepath>
</directory>
如果我使用PowerGUI单步执行代码,就会找到每个节点,并按照我的预期尝试替换/删除,但会出现错误(字符串到XmlElement的转换)或没有错误但没有更新,这取决于我如何进行分配。如果没有SSSB示例中的属性,那么是否要更改/删除特定节点?

我将使用一点来获得XML节点的句柄。对我来说,这比使用PowerShell为XML节点创建的属性更容易

# Find qualnas1 path and replace with GlobalNAS
$DirectoryXML.SelectNodes('/directory/filepath') | ? {
        $_.InnerText -eq '\\qualnas1\library\content'
    } | % {
        $_.InnerText = '\\GlobalNAS\library\content'
    }

# Find extraneous library paths and remove them
$DirectoryXML.SelectNodes('/directory/filepath') | ? {
        $_.InnerText -eq '\\qualnas2\library\content'
    } | % {
        $_.ParentNode.RemoveChild($_)
    }

谢谢-我会尝试一下,让你知道结果如何。安迪-把它插入我的代码,效果很好。谢谢你的帮助!注意:在加载()之前必须设置保留空格。
# Find qualnas1 path and replace with GlobalNAS
$DirectoryXML.SelectNodes('/directory/filepath') | ? {
        $_.InnerText -eq '\\qualnas1\library\content'
    } | % {
        $_.InnerText = '\\GlobalNAS\library\content'
    }

# Find extraneous library paths and remove them
$DirectoryXML.SelectNodes('/directory/filepath') | ? {
        $_.InnerText -eq '\\qualnas2\library\content'
    } | % {
        $_.ParentNode.RemoveChild($_)
    }