Как использовать переменную PowerShell в качестве параметра команды?

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

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

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


Более Конкретно:
Здесь 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 ответов


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

 $newVar = @{option1 = $true}
 mycommand @newVar
добавлено:
$AS_policy1 = @{
Identity = "asdf"
AllowBluetooth = $true
}

Set-ActiveSyncMailboxPolicy @AS_policy1

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

 iex "MyCommand -$($newVar):$true"

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

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

результат

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


У меня была такая же проблема и как решить ее. Решение использовать Invoke-выражение: вызвать выражение $mycmd Это использует $mycmd-string, заменяет переменные и выполняет его как командлет с заданными параметрами