Как использовать переменную PowerShell в качестве параметра команды? - PullRequest
12 голосов
/ 11 мая 2011

Я пытаюсь использовать переменную в качестве параметра команды, но не могу понять это. Допустим, MyCommand примет два параметра: option1 и option2 и они принимают логические значения. Как бы я использовал $ newVar для замены варианта 1 или 2? Например:

$newVar = "option1"
MyCommand -$newVar:$true

Я продолжаю получать что-то вроде 'Не удается найти позиционный параметр, который принимает аргумент' -System.String option1 '.


Более конкретно:
Здесь CSV-файл является выходом другой политики. Цикл проходит через каждое свойство в файле и устанавливает это значение в моей политике asdf ; поэтому -$_.name:$_.value следует заменить на -AllowBluetooth:true.

Import-Csv $file | foreach-object {
    $_.psobject.properties | where-object {
    # for testing I'm limiting this to 'AllowBluetooth' option
    if($_.name -eq "AllowBluetooth"){
    Set-ActiveSyncMailboxPolicy -Identity "asdf" -$_.name:$_.value
    }}
}

Ответы [ 4 ]

21 голосов
/ 11 мая 2011

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

 $newVar = @{option1 = $true}
 mycommand @newVar

Добавленный пример:

$AS_policy1 = @{
Identity = "asdf"
AllowBluetooth = $true
}

Set-ActiveSyncMailboxPolicy @AS_policy1
3 голосов
/ 11 мая 2011

Посмотрите, работает ли это для вас:

 iex "MyCommand -$($newVar):$true"
1 голос
/ 07 июня 2017

У меня была такая же проблема, и я только что узнал, как ее решить.Решение состоит в том, чтобы использовать invoke-Expression: invoke-Expression $ mycmd. При этом используется строка $ mycmd, заменяет переменные и выполняет ее как командлет с заданными параметрами

1 голос
/ 11 мая 2011

Я бы попробовал с:

$mycmd = "MyCommand -$($newVar):$true"
& $mycmd

результат

Не может работать, потому что оператор амперсанда просто выполняет отдельные команды без параметров или блоков сценариев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...