2011-12-15 26 views
9

コロンを必要とするPowershellコマンドレットスイッチパラメータとは何ですか?Powershell:コマンドレットパラメータ内のコロン

Exchange 2010管理シェルコマンドレットMove-ActiveMailboxDatabaseを検討してください。 Confirmスイッチは、コマンドがそうのようなスイッチを確認していない認識に失敗したコロンがなければSystem.Management.Automation.SwitchParameterですので、のように使用しなければならない、

Move-ActiveMailboxDatabase -Confirm:$false 

Move-ActiveMailboxDatabase -Confirm $false 

それはなぜですか?コロンの違いは何ですか? Exchange2010がこの動作に気づいた唯一のものだと思われる理由は何ですか?

私はPowershell in ActionとPowershell 2.0を閲覧しましたが、この構文について何も見つかりませんでした。スコープ解決と.Netオブジェクトへのアクセスの使用については、これらの書籍に記載されています。

私のGoogle-fuはスイッチパラメータ値を明示的に転送すると主張しているが、その内容については説明していないと主張しているarticleが見つかりました。

答えて

19

あなたは:

Move-ActiveMailboxDatabase -Confirm $false 

あなたはConfirmパラメータが$falseを受け入れると言っていません。 -Confirmと指定し、(別の)引数を値$falseのコマンドレットに渡します。

Confirmはスイッチであるため、-Confirmの存在が真であることを意味します。 -Confirmの不在は、それが偽であることを意味する。 、あなたは.\script.ps1 -testとしてそれを実行する場合

Test is False 

:あなたはちょうどあなたが出力を得る.\script.ps1すなわち任意の引数/偶然にせずにスクリプトを実行した場合

param([switch]$test) 

write-host Test is $test 

は、私はあなたにスクリプトの例をあげてみよう出力は

Test is True 

として実行すると、出力を使用すると、出力はそれがスイッチ変数自体の値が別の変数から決定されていないシナリオである

Test is False 

ある.\script.ps1 -test:$falseとして、それを実行する場合

Test is True 

である:使用されている。

たとえば、スクリプト考える:あなたは.\script.ps1 -in $falseとしてそれを実行する場合は、:を使用することができなかった場合は、

Test is false 

を取得し、ここで

param ([boolean]$in) 

function func([switch] $test){ 
write-host Test is $test 
} 

func -test:$in 

を、あなたは持っていただろう

if($in){ func -test} 
else { func } 
+0

メールボックスの例についてはわかりませんが、他の多くのケース(たとえば 'Set-SMBServerConfiguration')では、' -Confirm:$ false'の効果はその不在とは異なります。 '-Confirm:$ false'や' -Force'を使うことができます。そうでなければ、私は確認する必要があります。 – Lamarth

4

コロンはすべてのパラメータで使用できますスイッチパラメータの場合はより特別です。スイッチパラメータは値をとらず、存在する($ true)か存在しない($ false)かのどちらかです。

あなたはこのような機能を持っていると想像:

function test-switch ([string]$name,[switch]$force) { ... } 

をそして、あなたがそうのようにそれを呼び出す:

test-switch -force $false 

スイッチパラメータが存在かのどちらかなので、$の虚偽のは、実際の名前に結合しますパラメータ。では、スイッチパラメータに値をバインドする方法はありますか?コロンで:

test-switch -force:$false 

ここで、パラメーターバインダーは値がどのパラメーターに行くかを知っています。

関連する問題