PowerShellでは未初期化変数は$null値として扱われます。
この挙動は、意図しない不具合の原因となることがあります。
例えば以下のコードは一見、"Hello, World!"と表示されそうに見えます。
$message = "Hello, World!"
Write-Host $mesage
しかし、このコードを実行すると実際には何も表示されません。
これは、1行目 ($message) と2行目 ($mesage) で変数名がタイプミスにより異なっているためです。
結果として、2行目では初期化されていない変数を参照し、何も表示されません。
このコードは短いのですぐにタイプミスであると気づくことができますが、コードが複雑になるにつれ、このような問題には気づきにくくなります。
PowerShellではこのような挙動を変更するSet-StrictModeというコマンドレットがあります。
先程のコードの先頭に
Set-StrictMode -Version 1.0
と入力して再度、コードを実行します。
すると、以下の結果が表示されます。
変数 '$mesage' は、設定されていないために取得できません。
発生場所 C:\Users\sky\Documents\test.ps1:3 文字:12
+ Write-Host $mesage
+ ~~~~~~~
+ CategoryInfo : InvalidOperation: (mesage:String) []、RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
これなら未初期化変数を使ってしまっていた、ということがすぐに気づけます。
このようにSet-StrictModeコマンドレットではデフォルトの挙動を変更して厳格なチェックを行うモードに切り替えることができます。
Set-StrictModeコマンドレットでは指定するバージョンに応じて未初期化変数以外にも厳格なチェックを行うことができますので、ぜひご活用ください。

