web-dev-qa-db-ja.com

PowerShell変数をコマンドパラメーターとして使用する方法

変数をコマンドのパラメーターとして使用しようとしていますが、わかりません。 MyCommandoption1option2の2つのパラメーターを受け入れ、ブール値を受け入れるとします。オプション1または2を置き換えるために$ newVarをどのように使用しますか?例えば:

$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
    }}
}
14
Gary

通常、変数を使用してコマンドレットパラメーターを設定するには、ハッシュテーブル変数を使用し、@を使用して変数をスプラットします。

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

追加された例:

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

Set-ActiveSyncMailboxPolicy @AS_policy1
21
mjolinor

これがあなたのために働くかどうか見てください:

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

私は同じ問題を抱えていて、それを解決する方法を見つけました。解決策は、invoke-Expressionを使用することです。invoke-Expression$ mycmdこれは、$ mycmd-stringを使用し、変数を置き換えて、指定されたパラメーターを持つコマンドレットとして実行します。

1
residuum

私は試してみます:

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

結果

アンパサンド演算子は、パラメータまたはスクリプトブロックなしで単一のコマンドを実行するだけなので、機能しません。

1
Emiliano Poggi