Powershell:使用splatting与scriptblocks?

时间:2011-07-14 17:51:03

标签: scripting powershell

我编写了一个简单的函数来创建一个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时,如何存储该值?

2 个答案:

答案 0 :(得分:1)

您需要先评估参数值,然后再将它们粘贴到哈希表中。这样的事情。

foreach ($param in $config.$root.$child) {
    $hash.add($param.name,(Invoke-Expression $param.value))
}

答案 1 :(得分:0)

这在有限的测试中对我有用:

 $hash.add($($param.name),$($param.value))