如何使用PowerShell变量作为命令参数?

时间:2011-05-10 21:44:02

标签: variables powershell parameters

我正在尝试将变量用作命令的参数,但无法弄明白。假设MyCommand将接受两个参数:option1option2,它们接受布尔值。如何使用 $ 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 个答案:

答案 0 :(得分:21)

通常使用变量来填充cmdlet参数,您将使用哈希表变量,并使用@

将其展开
 $newVar = @{option1 = $true}
 mycommand @newVar

添加了示例:

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

Set-ActiveSyncMailboxPolicy @AS_policy1

答案 1 :(得分:3)

看看这是否适合你:

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

答案 2 :(得分:1)

我会尝试:

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

结果

无法工作,因为&符号运算符只执行没有参数或脚本块的单个命令。

答案 3 :(得分:1)

我遇到了同样的问题,并且发现了如何解决它。解决方案是使用invoke-Expression:invoke-Expression $ mycmd 这使用$ mycmd-string替换变量并将其作为具有给定参数的cmdlet执行