Powershell: используя сплаттинг со скриптовыми блоками? - PullRequest
0 голосов
/ 14 июля 2011

Я написал простую функцию для создания хеш-таблицы из xml-файла, который будет содержать параметры, которые должны быть переданы в командлет.Мой 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

Я хочу иметь возможность передавать скрипт-блоки в качестве значения параметра, чтобы использовать другие командлеты, такие как get-date, для вычисления нескольких значений.
Например: я хочу сохранить параметры для get-eventlog в xml-config-file, но я всегда хочу иметь журналы за последние 7 дней.

Как мне сохранить значение, чтобы оно выполнялось при передаче его командлету через сплаттинг?

Ответы [ 2 ]

1 голос
/ 19 июля 2011

Вам нужно оценить значения параметров перед тем, как поместить их в хеш-таблицу.Как то так.

foreach ($param in $config.$root.$child) {
    $hash.add($param.name,(Invoke-Expression $param.value))
}
0 голосов
/ 14 июля 2011

Это сработало для меня в ограниченном тестировании:

 $hash.add($($param.name),$($param.value))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...