我编写了一个简单的函数来创建一个xml文件的哈希表,该文件将保存应该传递给cmdlet的参数。 我的XML-File看起来像这样:
<params>
<Parameter>
<Name>After</Name>
<Value>(get-date).adddays(-7)</Value>
</Parameter>
<Parameter>
<Name>Log</Name>
<Value>System</Value>
</Parameter>
</params>
我的功能如下:
function Create-ParamTable {
param ([string]$ConfigFile,[string]$Root = "params", [string]$Child = "Parameter")
$hash = @{}
[xml]$config = get-content $ConfigFile
foreach ($param in $config.$root.$child) {
$hash.add($param.name,$param.value)
}
return $hash
}
我正在使用splat-operator的返回哈希表:
PS > $h = create-paramtable -configfile c:\tmp\params.xml ; get-eventlog @h
我希望能够将scriptblocks作为参数值传递,以便使用get-date等其他cmdlet来计算一些值。
例如:我想在xml-config文件中存储get-eventlog的参数,但我总是希望获得过去7天的日志。
如何通过splatting将值传递给cmdlet时,如何存储该值?
答案 0 :(得分:1)
您需要先评估参数值,然后再将它们粘贴到哈希表中。这样的事情。
foreach ($param in $config.$root.$child) {
$hash.add($param.name,(Invoke-Expression $param.value))
}
答案 1 :(得分:0)
这在有限的测试中对我有用:
$hash.add($($param.name),$($param.value))