Powershell: XML импорт не передает значения из XML - PullRequest
0 голосов
/ 21 февраля 2020

Попытка импортировать значения из Xml

<configuration>
<properties>
<subtype type="integer">1</subtype>
<name type="string">packer-centos8-base-g2-10</name>
</properties>
<settings>
<processors>
<count type="integer">4</count>
</processors>
<memory>
<bank>
<dynamic_memory_enabled type="bool">False</dynamic_memory_enabled>
<limit type="integer">1048576</limit>
<reservation type="integer">512</reservation>
<size type="integer">4096</size>
</bank>
</memory>
</settings>
<AltSwitchName type="string">Default Switch</AltSwitchName>
<boot>
<device0 type="string">Optical</device0>
</boot>
<secure_boot_enabled type="bool">False</secure_boot_enabled>
<notes type="string"> </notes>
<vm-controllers>
<scsi ChannelInstanceGuid="x">
<controller0>
<drive0>
<pathname type="string">
C:\San\SV65\hyper-packer\hyper-packer\hyperv314337150\packer-centos8-base-g2-10.vhdx
</pathname>
<type type="string">VHD</type>
</drive0>
</controller0>
</scsi>
</vm-controllers>
</configuration>

Вывод команд Powershell

PS C:\San\SV65\ps> $jvariables=Get-Content -Raw -Path '.\variables-ps.json' | ConvertFrom-Json
PS C:\San\SV65\ps> $VMXml = Get-ChildItem -path $jvariables.vmfp -recurse -include *.xml

PS C:\San\SV65\ps> write-host $jvariables.vmfp

C:\San\SV65\hyper-packer\hyper-packer\output-centos8-10\Virtual Machines\

PS C:\San\SV65\ps> write-host $VMXml

C:\San\SV65\hyper-packer\hyper-packer\output-centos8-10\Virtual Machines\box.xml

PS C:\San\SV65\ps> write-host $VMbox

PS C:\San\SV65\ps>

$ VMbox получает нулевое значение, я пытаюсь извлечь значение из xml

 $name = $VMbox.configuration.properties.name

это из-за пробелов в btn "Виртуальные машины"? в $ VM Xml?

Если он заполняется из переменных. json

$jvariables=Get-Content -Raw -Path '.\variables-ps.json' | ConvertFrom-Json

{
"psfp":  "C:\\San\\SV65\\ps\\",
"vmfp": "C:\\San\\SV65\\hyper-packer\\hyper-packer\\output-centos8-10\\Virtual Machines\\",
"psmp": "C:\\San\\SV65\\ps\\",
"vmname": ""
} 

Как добавить значения в переменную как 'значение' в этом формате?

Даже если я добавлю, он не будет выполнен в PowerShell.

Итак, я хочу извлечь путь из json и попытаться получить значение из Xml и использовать в код.

1 Ответ

1 голос
/ 21 февраля 2020

Вы забыли загрузить файл xml после получения пути в переменной $VMXml.
Кроме того, весьма вероятно / возможно, что при использовании

$VMXml = Get-ChildItem -path $jvariables.vmfp -recurse -include *.xml

эта переменная содержит массив объектов FileInfo и / или DirectoryInfo, поэтому лучше использовать что-то вроде

$VMXml = Get-ChildItem -Path $jvariables.vmfp -Recurse -Filter '*.xml' -File | Select-Object -First 1

, чтобы получить только один объект FileInfo.

Затем создать экземпляр переменной $VMbox, используя

[xml]$VMbox = Get-Content -Path $VMXml.FullName

и получите значения из этого с вашим кодом $name = $VMbox.configuration.properties.name

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...