ユーザ設定変数とは

PowerShell Coreにはユーザ設定変数(Preference Variable)と呼ばれる変数が存在している。これはPowerShell Coreの挙動に影響を与える変数で、PowerShell Coreを起動してから終了するまで使われる。ユーザはこの値を変更することにより、必要に応じてPowerShell Coreの挙動を変更することができる。

PowerShell Coreを学び始めた段階ではユーザ設定変数を変更する必要性はそれほど高くないと思う。現段階では変数を設定することでPowerShellの挙動を変えることができる機能がある、ということだけでも覚えておいてもらえればと思う。

ユーザ設定変数の種類とデフォルト値

PowerShell Coreには次のようなユーザ設定変数が用意されている。PowerShell Coreを起動すると自動的に次の変数が設定されている。

ユーザ設定変数 デフォルト値
ConfirmPreference High
DebugPreference SilentlyContinue
ErrorActionPreference Continue
ErrorView NormalView
FormatEnumerationLimit 4
InformationPreference SilentlyContinue
LogCommandHealthEvent False
LogCommandLifecycleEvent False
LogEngineHealthEvent True
LogEngineLifecycleEvent True
LogProviderLifecycleEvent True
LogProviderHealthEvent True
MaximumAliasCount 4096
MaximumDriveCount 4096
MaximumErrorCount 256
MaximumFunctionCount 4096
MaximumHistoryCount 4096
MaximumVariableCount 4096
OFS ” “
OutputEncoding ASCIIEncodingオブジェクト
ProgressPreference Continue
PSDefaultParameterValues None
PSEmailServer None
PSModuleAutoLoadingPreference All
PSSessionApplicationName WSMAN
PSSessionConfigurationName http://schemas.microsoft.com/PowerShell/microsoft.PowerShell
PSSessionOption オブジェクト
WarningPreference Continue
WhatIfPreference 0
VerbosePreference SilentlyContinue

ユーザ設定変数の意味や設定できる値はそれぞれ次のとおり。

ユーザ設定変数 内容
ConfirmPreference 危険度の高いコマンドレットや関数を実行する前に確認を求めるかどうか(None、Low、Medium、High)
DebugPreference デバッグメッセージに対するPowerShellの挙動(Stop、Inquire、Continue、SilentlyContinue)
ErrorActionPreference 非終了エラーに対するPowerShellの挙動(Stop、Inquire、Continue、Suspend、SilentlyContinue)
ErrorView エラーメッセージの表示形式(NormalView、CategoryView)
FormatEnumerationLimit 表示されるアイテムの数。表示できない場合には…で省略表記
InformationPreference インフォメーションストリーム設定(Stop、Inquire、Continue、Suspend、SilentlyContinue)
LogCommandHealthEvent コマンドの初期化および処理時におけるエラーと例外を記録するかどうか(True、False)
LogCommandLifecycleEvent コマンドおよびコマンドパイプラインの開始と停止およびコマンド探索におけるセキュリティ例外を記録するかどうか(True、False)
LogEngineHealthEvent セッションのエラーと失敗を記録するかどうか(True、False)
LogEngineLifecycleEvent セッションの開始と終了を記録するかどうか(True、False)
LogProviderLifecycleEvent プロバイダエラーを記録するかどうか(True、Falase)
LogProviderHealthEvent プロバイダの追加と削除を記録するかどうか(True、False)
MaximumAliasCount エイリアス数の上限値
MaximumDriveCount ドライブ数の上限値
MaximumErrorCount エラー履歴保存数の上限値
MaximumFunctionCount 関数の数の上限値
MaximumHistoryCount コマンド履歴保存数の上限値
MaximumVariableCount 変数の最大値
OFS 出力フィールドセパレータ
OutputEncoding アプリケーションにテキストを送信する時の文字エンコーディング(ASCIIEncoding、SBCSCodePageEncoding、UTF7Encoding、UTF8Encoding、UTF32Encoding、UnicodeEncodingおよびここから派生したエンコーディングクラスのオブジェクトなど)
ProgressPreference プログレス(進捗表示)に対するPowerShellの挙動(Stop、Inquire、Continue、SilentlyContinue)
PSDefaultParameterValues コマンドレットや関数のパラメータのデフォルト値
PSEmailServer メール送信に使われる電子メールサーバ
PSModuleAutoLoadingPreference モジュールの自動インポート機能の有効無効(All、ModuleQualified、None)
PSSessionApplicationName WS-Management技術を使用するリモートコマンドのデフォルトアプリケーション名
PSSessionConfigurationName 現在のセッションで生成されたPSSessionsに対して使われるデフォルトセッション設定を指定
PSSessionOption リモートセッションにおける各種デフォルト値
WarningPreference 警告メッセージに対するPowerShellの挙動(Stop、Inquire、Continue、SilentlyContinue)
WhatIfPreference WhatIfをサポートしているコマンドで自動的に有効化するかどうか(0、1)
VerbosePreference Verboseメッセージに対するPowerShellの挙動(Stop、Inquire、Continue、SilentlyContinue)

PowerShell Coreでスクリプトを組むようになってくると、PowerShell Coreの挙動を変えるためにユーザ設定変数を変更する機会が増えはじめるが、それ以外の方は特に設定を変更する必要はないだろう。デフォルトの設定で十分扱いやすいようになっている。

ユーザ設定変数を使ってみる

ユーザ設定変数を変更することでPowerShellの挙動が変わることを見ていこう。確認プロンプトの表示有無を左右する$ConfirmPreferenceがわかりやすいと思うので、この変数で動作例を紹介する。

まず、$ConfirmPreferenceはデフォルトではHighが設定されており、危険性の高い関数やコマンドレットに関してのみ、確認プロンプトを表示するようになっている。デフォルトの設定の状態ではRemove-Itemコマンドレットでファイルを削除しても、次のように確認プロンプトは表示されない。

Remove-Itemでファイルを削除($ConfirmPreference = High)

PS /Users/daichi> $ConfirmPreference
High
PS /Users/daichi> Remove-Item ./test.txt
PS /Users/daichi>

 

続いて、$ConfirmPreferenceをMediumに変更してからRemove-Itemを実行してみる。今度は次のように確認ダイアログが表示されるようになる。

Remove-Itemでファイルを削除($ConfirmPreference = Medium)→ 確認プロンプト出現

PS /Users/daichi> $ConfirmPreference = "Medium"
PS /Users/daichi> $ConfirmPreference
Medium
PS /Users/daichi> Remove-Item ./test.txt

Confirm
Are you sure you want to perform this action?
Performing the operation "Remove File" on target "/Users/daichi/test.txt".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):
PS /Users/daichi>

 

さらに$ConfirmPreferenceをLowに変更してからRemove-Itemを実行してみる。今度は次のように確認ダイアログが表示される。LowはMediumよりも条件が低いため、Mediumで確認プロンプトを出すコマンドレットはLowでも確認プロンプトが出る。

Remove-Itemでファイルを削除($ConfirmPreference = Low)→ 確認プロンプト出現

PS /Users/daichi> touch test.txt
PS /Users/daichi> $ConfirmPreference = "Low"
PS /Users/daichi> $ConfirmPreference
Low
PS /Users/daichi> Remove-Item ./test.txt

Confirm
Are you sure you want to perform this action?
Performing the operation "Remove File" on target "/Users/daichi/test.txt".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):
PS /Users/daichi>

 

最後に$ConfirmPreferenceをNoneに変更してからRemove-Itemを実行してみる。次のように確認プロンプトは表示されなくなる。

Remove-Itemでファイルを削除($ConfirmPreference = None)

PS /Users/daichi> $ConfirmPreference = "None"
PS /Users/daichi> $ConfirmPreference
None
PS /Users/daichi> Remove-Item ./test.txt
PS /Users/daichi>

 

このように、ユーザ設定変数を変更するとコマンドレットの動作が変わる。スクリプトを作成してデバッグを実施したいといった段階になってくると、こうしたユーザ設定変数を使ってデバッグ情報を増やすというのはひとつの方法となる。

スクリプトに慣れていない方も、ひとまずこうした操作ができる、といったことを覚えておいてもらえればと思う。

参考資料