Как передать переменные командлеты в Powershell? - PullRequest
0 голосов
/ 31 октября 2018

Я хочу параметризовать конвейер Powershell, вставив шаг конвейера из параметра, как в следующем упрощенном примере.

param (
    $path,
    $dataset,
    $processor
)

$datasetProcessor = Get-Command 'Convert-Noop'
if ( $processor.Keys -contains $dataset.Name ) {
    $datasetProcessor = $Processor[$dataset.Name]
}

Read-Dataset $dataset `
| $datasetProcessor `
| Export-Csv $path -NoTypeInformation

Это приводит к ошибке

Выражения допускаются только в качестве первого элемента конвейера

Может быть, это будет работать с использованием Invoke-Expression, но тогда я больше не смогу использовать отладчик.

Какой подход может работать?

Спасибо, Штеффен

1 Ответ

0 голосов
/ 31 октября 2018

Вы указали блок скрипта (или команду, возвращаемую из get-command) в качестве элемента конвейера. Это выражение.

Чтобы использовать блок сценария, добавьте перед ним знак &.

Read-Dataset $dataset `
| & $datasetProcessor `
| Export-Csv $path -NoTypeInformation

Вот пример использования встроенных командлетов:

$sort=get-command sort-object

get-childitem | & $sort -property Length -descending
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...