PowerShell を使っていると、突然こんなエラーに出くわすことがあります。
日本語にすると 「オブジェクト参照がオブジェクト インスタンスに設定されていません」 という意味で、.NET系スクリプトによくある Null 参照エラー です。
PowerShell では比較的ありがちなエラーですが、原因さえ分かれば回避は簡単です。本記事では、発生パターンと回避方法を整理します。

🔍 このエラーが発生する典型例
① null の変数に対してプロパティアクセス
→ $val に値が無いため .Length が処理できずエラー。
② コマンド実行結果に要素が返ってこない
Get-ADUser が該当ユーザーを返さない場合、$user が null となりエラー。
③ 配列・ハッシュテーブルの未初期化
$hash が未作成のまま使用するとエラー。
✅ よく使う回避テクニック
✔ 1. -ne $null でチェックしてから処理
PowerShell の比較は == より -eq / -ne を推奨。
✔ 2. Null合体演算子 ?? を使う(PowerShell 7 以降)
→ $user.DisplayName が null なら "Unknown" が代わりに入る。
✔ 3. Null 条件演算子 ?. を使う(PowerShell 7 以降)
→ $user が null でもエラーにならず null を返す。
✔ 4. 初期化してから使用する
✔ 5. Try / Catch で例外処理
|
1 2 3 4 5 |
try { $val.Length } catch { Write-Host "エラー: $($_.Exception.Message)" } |
🧪 よく使う便利テク:Nullチェック関数
毎回判定するのが面倒なら、関数化して管理すると楽になります。
✨ベストプラクティスまとめ
| ケース | 推奨テクニック |
|---|---|
| 値が返るか不明 | ?? / ?. / if ($val -ne $null) |
| 配列・ハッシュを扱う | 事前に初期化 |
| 不確実な外部コマンド | Try / Catch |
| スクリプト共通処理 | Nullチェック関数定義 |
まとめ
Object reference not set は null のままプロパティやメソッドを呼び出した場合に発生するエラーです。
回避方法のポイントは以下の3つ。
-
null チェックを徹底する
-
初期化漏れをなくす
-
PowerShell 7 の便利演算子(
??,?.)を活用する
PowerShell のエラー処理が整うと、スクリプトの信頼性と実行結果の安定性が一気に上がります。
業務バッチや自動化処理では、特に意識しておきたいポイントです。
