Как заставить 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>
Другие вопросы по тегам