我试图从脚本中删除变量的定义,并从类似于以下内容的 XML 配置文件中读取它们:
XML文件
<?xml version="1.0" encoding="utf-8" ?>
<settings>
<process>FALSE</process>
<xmlDir>\\serv1\dev</xmlDir>
<scanDir>\\serv1\dev</scanDir>
<processedDir>\\serv1\dev\done</processedDir>
<errorDir>\\serv1\dev\err</errorDir>
<log>\\serv1\dev\log\dev-Log##DATE##.log</log>
<retryDelay>5</retryDelay>
<retryLimit>3</retryLimit>
</settings>
Run Code Online (Sandbox Code Playgroud)
然后使用以下内容解析脚本中的 XML:
[xml]$configFile = Get-Content $PSScriptRoot\$confFile
$settings = $configFile.settings.ChildNodes
foreach ($setting in $settings) {
New-Variable -Name $setting.LocalName -Value ($setting.InnerText -replace '##DATE##',(get-date -f yyyy-MM-dd)) -Force
}
Run Code Online (Sandbox Code Playgroud)
这很好用,但问题是它们都作为字符串读取,但有些我需要作为整数读取。为了解决这个问题,我必须在创建变量后将它们更改为整数,如下所示:
$retryDelay = ([int]$retryDelay)
$retryLimit = ([int]$retryLimit)
Run Code Online (Sandbox Code Playgroud)
虽然这可行,但我希望在 XML 中包含其他变量,例如布尔值 $true / $false (并作为布尔值读入),并且宁愿让 foreach 能够处理它们的类型,而不是脚本中的其他行。任何线索表示赞赏。