json - Powershell:XML 导入不传递来自 XML 的值
问题描述
尝试从 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“虚拟机”中的空格吗?在 $VMXml 中?
如果它是从 variables.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 中获取值并在代码中使用。
解决方案
在变量中获取路径后忘记加载 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
希望有帮助
推荐阅读
- java - 在 TextButton 上测试事件处理程序
- javascript - 获取 TypeError: _this2.props.handleClick 在将 redux prop从容器传递到表示组件时不是一个函数反应
- python - 带有 Anaconda 3 的 Pyinstaller 无法安装
- git - 将 1 个分支的更改复制到其他分支
- android - Social.localUser.Authenticate 在 Unity 中每次都返回 false
- mysql - sql nested query explanation
- php - 将 ZipArchive 与 wordpress wp_filesystem 一起使用
- node.js - 应用程序可以在本地找到视图,但一旦上传到服务器就无法找到
- oracle - 如何在哪个应用程序中查找已使用来自 oracle apex 的工作区映像
- java - 在 Java 中读取和重写 XML 时,是否有系统的方法来保存处理指令?