【发布时间】:2020-04-17 00:41:13
【问题描述】:
我已经涉足 PowerShell 几年了,但我从未处理过 XML,而且我很难找到解决我遇到的问题的方法。我已经阅读了各种论坛上的无数主题,我想我承认我对自己想要完成的工作以及其他人在其他主题中解释的内容还不够了解。
我正在编写其他人编写的 PowerShell 脚本,该脚本主要捕获表数据并将其导出到 XML 文件。正在导出的表数据在其当前状态下是可用的,但是对于某些不是从表中派生的值,我需要找到一种简单的方法来更改 XML 节点的名称。
我的 PS 脚本示例是这样的:
$StartDate = [Management.ManagementDateTimeConverter]::ToDateTime($SYSINFO.LastBootUpTime)
$StartDate = "{0:G}" -F $StartDate
$EndDate = "{0:G}" -F (Get-Date)
$UPTIME = New-TimeSpan -Start $StartDate -End $EndDate
# Format Uptime for "DD:HH:MM:SS.MMMM"
$DispTime = "{0:G}" -F $UPTIME
# Remove .MMMM (Milliseconds)
$DispTime = $DispTime.Split('.')[0]
$DispTime = "$DispTime"
$DispTime | ConvertTo-XML -As String | Out-File -LiteralPath (C:\Scripts\ + "Uptime_Status.xml")
我的 XML 输出最终看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<Objects>
<Object Type="System.String">0:06:56:39</Object>
</Objects>
我需要做的是将<Object Type="System.String"> 标签更改为其他内容,例如<UPTIME>0:06:56:39</UPTIME>,或者甚至可能是<Object Type="System.String" Name="Uptime">0:06:56:39</Object>
目标是将节点的名称与其他 XML 标记区分开来,当我使用非表数据时,这些标记会与此相同。我还看到需要重复执行此操作的可能性,因此想知道是否可能还有一个选项,即在整个 XML 文件中自动使用 PS 变量的值作为 XML 节点名称。因此,例如,如果我正在处理 20 条数据,并且我可能将要捕获到 XML 中的值之一的数据标记为$DispTime,也许我还可以拥有另一个变量,例如$DispTime_NodeName = "Uptime" ,然后生成的 XML 可能只是:<Uptime>0:06:56:39</Uptime>。所以基本上 PS 脚本必须找到包含“_NodeName”的匹配变量名称,然后使用该值作为 XML 节点名称。我疯了吗?这是不可能的吗?我是不是想多了?
非常感谢任何愿意提供帮助的人......如果我能得到任何可靠的帮助,我将不胜感激。请记住,我还是个新手 :) 哈哈
【问题讨论】:
标签: xml powershell nodes