2011-07-14 21 views
0

我寫了一個簡單的函數來創建一個xml文件的散列表,它將保存應傳遞給cmdlet的參數。 我的XML的文件看起來是這樣的:Powershell:使用splatting與scriptblocks?

<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 
} 

我使用返回的Hashtable與圖示運營商:

PS > $h = create-paramtable -configfile c:\tmp\params.xml ; get-eventlog @h 

我希望能夠將scriptblocks作爲參數值傳遞,以便使用其他cmdlet(如get-date)來計算幾個值。
例如:我想將get-eventlog的參數存儲在xml-config-file中,但我總是希望獲得過去7天的日誌。

如何通過splatting將值傳遞給cmdlet時如何存儲值以便執行該值?

回答

1

您需要在哈希表堅持他們之前評估的參數值。像這樣的東西。

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

這有限的測試工作對我來說:

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