このページの本文へ

Windows Info 第510回

PowerShellの「共通パラメーター」を理解する

2025年12月28日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 PowerShellのすべての組み込みコマンドは、「共通パラメーター」(CommonParameters、https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_commonparameters?view=powershell-7.5)というオプション指定を受け付けるようになっている。

 この「共通パラメーター」は、PowerShellコマンドのエラー対応やメッセージの表示/抑制などを制御するためのもの。また、コマンドは解釈されるものの、何が起こるのかをメッセージで表示するだけで実行はしない「リスク管理パラメーター」も指定できる。

 誤解のないように用語だけ確認しておく。ここでいう「パラメーター」とは、PowerShellコマンドの引数をさす。コマンドラインの引数は、「オプション指定」あるいは「オプション指定+オプション引数」からなる。

 PowerShellのコマンドでは、スペースで区切られて、ハイフンで始まるのがオプション指定である。なお、「オプション」という語は、「選択可能」という意味でも使われることがある。このため、コマンドラインの指定に関しては、「オプション指定」と表記することにした。

共通パラメーターとは?

 以下の表は、共通パラメーターの一覧である。共通パラメーターは、4つに分類できる。1つはエラーや警告、その他の情報がコマンドから発せられた場合の対応を制御するもの。これは表中分類を「共通」としてある。

Windows

 共通に分類されたオプション指定は、エラーなどへの対応を制御するもの。PowerShellには、全コマンドの挙動を設定する「Preference変数」が用意されている。コマンド用のPreference変数は、全コマンドの規定動作を指定する。

 一部のオプション指定は、Preference変数の設定を該当コマンドに対して変更(オーバーライド)するものだ。PowerShellの起動時にPreference変数に入っている値が既定値となる。なお、この既定値を変更したい場合には、プロファイルなどでPreference変数を変更する。

 これらのオプション指定では、Action列挙値(後述)で動作を変更するものと、オプション指定の有無あるいは真偽値を引数として取るものがある。一般にオプションパラメーターの有無は、コマンド内部では真偽値として扱われる。真偽値を引数に取るのは、これを明確に記述したものである。

 たとえば「-Debug」オプション指定の場合、コマンドラインに単に「-Debug」と記述すれば、$DebugPreference変数の値が「Continue」にオーバーライドされ、デバッグメッセージが表示されるようになる。これは、コマンドラインでは「-Debug:$true」と表記しても同じ意味になる。

 逆に「-Debug」を指定しないと、$DebugPreference変数の値が有効になる。この指定は「-Debug:$false」と表記することもできる。注意するのは、$DebugPreference変数が変更されている可能性があることだ。$DebugPreferenceの既定値はSilentlyContinueなので、「-Debug」が指定されていないと既定値が使われ、デバッグメッセージが抑制される。

 しかし、他の値が指定されている場合に何も指定がないと、$DebugPreferenceの設定値に従ってコマンドが動作する。このようなとき、デバッグメッセージを抑制したいなら、「-Debug:$false」を指定する必要がある。

 分類が「共通」になっているもののうち、オプション名が「~Action」となっているものは、引数にAction列挙値を指定する。たとえば、「-ErrorAction」オプション指定ならば「-ErrorAction Stop」などと指定する。

Windows

 もう1つは、コマンドからの出力ストリームを変数に記憶させるもの。PowerShellのコマンドは、7つの出力ストリームを持っている。

Windows

 スクリプトからは、Write-系コマンドを使ってそれぞれのストリームに出力できる。このとき共通パラメーターの変数出力オプションを指定すると、指定した変数名にストリーム出力を記録させることが可能になる。引数である変数名には「$」はつけない。また、この変数名の前に「+」を置くことで、変数に追記される。

 分類で「その他」になっているものは、コマンドラインのパイプライン処理でバッファリングをするためのもの。既定値では、パイプライン処理では、バッファリングはなされない。これは、ネットワークを介してオブジェクトを処理させるような場合に、バッファリングをさせることで、送信頻度を落とし帯域を専有しないようにするためなどに使われる。以上の3つ分類は、すべてのコマンドに適用が可能な「共通パラメーター」である。

 分類が「リスク管理」となっているものは、ファイルを書き換えるなど、システム側を変更してしまうようなコマンドでのみに適用可能なもの。Get-ChildItemによるファイルの一覧など、システム状態を変更しないコマンドには適用できない。

 このリスク管理用のオプション指定は2つある。1つは、コマンドの処理をせず、メッセージとして表示する「-WhatIf」オプション指定だ。これを使うことで、危険なコマンドであっても、実行前に何がされるのかを確認できる。この挙動は、Preference変数である「$WhatIfPreference」が既定値を決める。初期状態では、無効(False/偽/0)となっていて動作は無効になっている。

 「-WhatIf」あるいは「-WhatIf:$true」では、$WhatIfPreferenceの値が有効(True/真/1)にオーバーライドされる。

 もう1つのオプション指定は、「-Confirm」である。こちらは、コマンドの実行前に確認をするもの。これは、$ConfirmPreference変数による既定値をオーバーライドするもの。この変数には、「ComfirmImpact」と呼ばれる列挙値を設定する。これは、システムに対する影響の大きさを元に確認すべき度合いを指定する。

Windows

 また、このオプションを使って、確認を行う場合、PowerShellは、実行の可否などについて聞いてくる。選択肢は5つある。

Windows

 このとき、「S」(Suspend)を選択すると、一時的にセッションが開いて、プロンプトが表示される。ここで各種のコマンドを使うことが可能になる。最後にexitコマンドを実行すると、実行可否の入力状態に戻れる。

 共通パラメーターは、エラー処理、特にコマンドを中止しないエラーへの対応や、各種メッセージ表示の可否などの機能がある。たとえば、多数の出力があるコマンドで途中に挟まるエラーメッセージが邪魔に感じる場合、「-ErrorAction SilentlyContinue」を使うと、赤で表示されるエラーを抑制することが可能だ。

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン