変数をコマンドのパラメーターとして使用しようとしていますが、わかりません。 MyCommand
がoption1
とoption2
の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
}}
}
通常、変数を使用してコマンドレットパラメーターを設定するには、ハッシュテーブル変数を使用し、@を使用して変数をスプラットします。
$newVar = @{option1 = $true}
mycommand @newVar
追加された例:
$AS_policy1 = @{
Identity = "asdf"
AllowBluetooth = $true
}
Set-ActiveSyncMailboxPolicy @AS_policy1
これがあなたのために働くかどうか見てください:
iex "MyCommand -$($newVar):$true"
私は同じ問題を抱えていて、それを解決する方法を見つけました。解決策は、invoke-Expressionを使用することです。invoke-Expression$ mycmdこれは、$ mycmd-stringを使用し、変数を置き換えて、指定されたパラメーターを持つコマンドレットとして実行します。
私は試してみます:
$ mycmd = "MyCommand-$($ newVar):$ true" &$ mycmd
結果
アンパサンド演算子は、パラメータまたはスクリプトブロックなしで単一のコマンドを実行するだけなので、機能しません。