Обновление файлов XML с помощью PowerShell

Я использую 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?

6
задан AndyDrav 10 February 2012 в 21:15
поделиться