使用 PowerShell 替换 XML 变量



我正在编写一个PowerShell脚本来自动升级已安装的组件。该文件的配置详细信息存储在 XML 文件中。由于变量之间存在相互依赖性,因此变量定义如下。

<root>
<variable name="APP_NAME", value="My App" />
<variable name="INSTALL_PATH", value="some folder/${APP_NAME}" />
<variable name="PRODUCT_HOME" value="${INSTALL_PATH}productinfo${APP_NAME}" />
<root>

当我读取XML文件时,我想将$INSTALL_PATH的值获取为some folder/My App而不是some Folder/${APP-NAME}。并且APP_NAME的值在几个步骤后发生变化,我必须再次重新解析XML文件。

最好的方法是什么?

我想读取 XML 文件并为 XML 文件中的每个变量创建 PowerShell 变量,当我必须重新解析 XML 文件时,我将更改变量的值。

有没有更好的方法来实现这一点?

如果<variable>节点是"按顺序"的,即每个节点仅使用先前节点中已经定义的变量,则可以执行以下操作:

$xml.SelectNodes('//variable') | ForEach-Object {
New-Variable -Name $_.name -Value $ExecutionContext.InvokeCommand.ExpandString($_.value)
}

否则,您必须首先定义变量,然后在第二步中展开嵌套变量:

$nodes = $xml.SelectNodes('//variable')
$nodes | ForEach-Object {
New-Variable -Name $_.name -Value $_.value
}
$nodes | Select-Object -Expand name | ForEach-Object {
$var = Get-Variable -Name $_
$var.Value = $ExecutionContext.InvokeCommand.ExpandString($var.Value)
}

请注意,使用哈希表而不是单个变量往往会使处理变得更加容易。

最新更新