我正在编写一个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)
}
请注意,使用哈希表而不是单个变量往往会使处理变得更加容易。