Scripting Powershell:将Splating与脚本块一起使用?

Scripting Powershell:将Splating与脚本块一起使用?,scripting,powershell,Scripting,Powershell,我编写了一个简单的函数,用xml文件创建一个哈希表,该哈希表将保存应传递给cmdlet的参数。 我的XML文件如下所示: <params> <Parameter> <Name>After</Name> <Value>(get-date).adddays(-7)</Value> </Parameter> <Parameter> &l

我编写了一个简单的函数,用xml文件创建一个哈希表,该哈希表将保存应传递给cmdlet的参数。 我的XML文件如下所示:

<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运算符一起使用:

PS > $h = create-paramtable -configfile c:\tmp\params.xml ; get-eventlog @h
我希望能够将scriptblocks作为参数值传递,以便使用其他cmdlet(如get date)计算一些值。
例如:我想将get eventlog的参数存储在一个xml配置文件中,但我总是想要过去7天的日志


当通过splatting将值传递给cmdlet时,我必须如何存储该值以使其执行?

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

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

在将参数值粘贴到哈希表中之前,需要对其求值。像这样的

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