Я использую 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>
Узел пути к файлу с type = sssb работает, когда я использую $ _. InnerText, но не могу найти способ обновить или удалить другие узлы. Вот мой код:
$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?