Как заставить Import-Clixml читать XML-файл с пользовательскими учетными данными?
Я получаю учетные данные для главного сервера пула Xen, используя Get-Credentials
, Я сохраняю учетные данные в XML
использование файла Export-Clixml
, Я хочу добавить элемент в XML
файл создан Export-Clixml
сохранить имя пула Xen и главный URL-адрес пула Xen в XML
файл.
Проблема: я создаю учетные данные XML
файл с помощью Export-Clixml, а затем измените XML
файл для добавления дополнительного элемента. Тем не менее, когда я прочитал XML
использование файла Import-Clixml
выдает ошибку: Import-Clixml : Obj XML tag is not recognized.
Как мне сделать Import-Clixml
читать мой XML-файл пользовательских учетных данных, чтобы получить учетные данные, не выдавая ошибку из-за моего пользовательского объекта?
1 ответ
Мой оригинальный подход состоял в том, чтобы найти XML
схема для XML
файл, созданный Export-Clixml
с надеждой, что схема поддерживает какой-то общий строковый элемент. Однако мне не удалось найти схему.
Решение состояло в том, чтобы использовать -first
аргумент Import-Clixml
Командлет.
Во-первых, я создал XML
использование файла Export-Clixml
, а потом я добавил вторую Obj
элемент (<Obj RefId="99" xmlns="">
)
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">UUUUU</S>
<SS N="Password">PPPP...PPPPP</SS>
</Props>
</Obj>
<Obj RefId="99" xmlns="">
<my-element-name my-element-attribute="AAAAA">EEEEEE</my-element-name>
</Obj>
</Objs>
Чтобы получить полномочия, я прочитал XML
как это:
$creds = $Import-Clixml -first 1 -path <fq path to xml file>
-first 1
сил Import-Clixml
читать только <Obj RefId="0">
элемент (и игнорировать мой пользовательский элемент)
Затем я перечитал файл XML, используя XMLReader
чтобы получить мой пользовательский элемент
Редактировать 1
Измененный подход согласно предложению Йеруна Мостерта
Заметки:
$ExportXmlFile.FileName
происходит от system.windows.forms.savefiledialog
$cred
загружается с выводом из get-credentials
$cred | Export-Clixml -Path $ExportXmlFile.FileName -Force
$xml = [xml] (type $ExportXmlFile.FileName)
[System.Xml.XmlElement]$root = $xml.DocumentElement
[System.Xml.XmlComment]$c = $xml.CreateComment(("poolName="+$textBoxXenPoolName.Text + "," + "poolMasterUrl="+$textBoxXenPoolMasterUrl.Text))
$xml.InsertBefore($c, $root);
$xml.Save($ExportXmlFile.FileName)
создает XML-файл со "структурированным" комментарием, который я могу читать и анализировать:
<!--poolName=nnnnn,poolMasterUrl=https://###.##.#.#-->
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
<Obj RefId="0">
<TN RefId="0">
<T>System.Management.Automation.PSCredential</T>
<T>System.Object</T>
</TN>
<ToString>System.Management.Automation.PSCredential</ToString>
<Props>
<S N="UserName">uuu</S>
<SS N="Password">pppp...pppp</SS>
</Props>
</Obj>
</Objs>