gpt4 book ai didi

xml - 使用 PowerShell 更新 XML 文件

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:26 26 4
gpt4 key购买 nike

我正在使用 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>

当我使用 $_.InnerText 时,type=sssb 的文件路径节点可以工作,但无法找到更新或删除其他节点的方法。这是我的代码:

$DirectoryXMLPath = 'C:\Temp\directory.xml'
if (Test-Path $DirectoryXMLPath)
{
$DirectoryXML = New-Object XML
$DirectoryXML.Load($DirectoryXMLPath)
$DirectoryXML.PreserveWhitespace = $true

# Find qualnas1 path and replace with GlobalNAS
$DirectoryXML.directory.filepath | Where-Object { $_ -eq '\\qualnas1\library\content' } |
ForEach-Object { $_.InnerText = '\\GlobalNAS\library\content' }

# Find extraneous library paths and remove them
$DirectoryXML.directory.filepath.Remove('\\qualnas2\library\content')
# $DirectoryXML.directory.mountpoint | Where-Object { $_ -eq '\\qualnas2\library\content' } |
# ForEach-Object { $DirectoryXML.RemoveChild($_) }

# This line is good! Need InnerText as attribute type exists
$DirectoryXML.directory.filepath | Where-Object { $_.InnerText -eq '\\qualnas1\SSSB\content' } |
ForEach-Object { $_.InnerText = '\\GlobalNAS\SSSB\content' }
}

如果我使用 PowerGUI 逐步执行代码,则会找到每个节点并按照我的预期尝试替换/删除,但要么出现错误(字符串到 XmlElement 的转换),要么没有错误但没有更新,具体取决于我的操作方式任务。如果没有 SSSB 示例中的属性,无论如何要更改/删除特定节点?

最佳答案

我会用一点 Xpath获取 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($_)
}

关于xml - 使用 PowerShell 更新 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com