ユーザ設定変数とは
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>
このように、ユーザ設定変数を変更するとコマンドレットの動作が変わる。スクリプトを作成してデバッグを実施したいといった段階になってくると、こうしたユーザ設定変数を使ってデバッグ情報を増やすというのはひとつの方法となる。
スクリプトに慣れていない方も、ひとまずこうした操作ができる、といったことを覚えておいてもらえればと思う。