はじめに(初心者だった自分の話)
最近、AI に PowerShell スクリプトを書いてもらいました。
見た目はそれっぽいし、コメントも丁寧。
でも実行すると、
- エラーが出る
- 「そのメソッドは存在しません」と言われる
- どこをどう直せばいいのか分からない
正直、
「これ、何を確認すればいいの?」
という状態でした。
結論から言うと、
PowerShell が使っている .NET の種類と、ドキュメントの前提がズレていた
これが原因でした。
この記事は、当時の自分のような 「AI の出した PowerShell スクリプトが動かない初心者」向けに、
- まずどこを確認すればいいか
- 「.NET」と「.NET Framework」の何が違うのか
を噛み砕いてまとめたものです。
まず初心者がやるべき「確認ポイント」
AI のコードが動かないとき、
いきなりコードを直そうとしなくて OK です。
最初に確認するのはこの 2 つだけです。
- 自分の PowerShell の種類
- PowerShell が使っている .NET
この 2 つが分かるだけで、
- 「コードが悪いのか」
- 「そもそも環境にそのメソッドが無いのか」
の切り分けがかなり楽になります。
自分が使っている PowerShell を確認する方法
まずは PowerShell 上でこれを実行します。
$PSVersionTable
ここで見るのは PSVersion です。
よくあるパターンは次の 2 つです。
- 5.1 → Windows PowerShell
- 7.x → PowerShell 7(クロスプラットフォーム版)
この記事で主に扱うのは Windows PowerShell 5.1 のケースです。
超重要:PowerShell 5.1 は何の上で動いている?
初心者が一番知らない事実がこれです。
Windows PowerShell 5.1 は .NET Framework 上で動いている
つまり、
- 最新の .NET(.NET 6 / 7 / 8)ではない
- 昔からある .NET Framework(4.x 系) の上で動いている
ということです。
言い換えると、
PowerShell で .NET のクラスやメソッドを呼ぶ
= .NET Framework の機能しか使えない
という前提になります。
ここが分かっていないと、
- AI が出してきた「最新 .NET 前提のコード」
- Microsoft Docs の「最新 .NET のサンプル」
をそのまま真似して 「メソッドが無い」「型が無い」地獄にハマります。
AI が出したコードが動かなかった理由
AI はだいたい、
- 最新の .NET
- 最新の公式ドキュメント
を前提にコードを生成します。
でも現実の自分の環境はというと、
- 自分の PowerShell → 5.1
- 実行基盤 → .NET Framework
- 参考にしたドキュメント → 最新 .NET
という 前提のズレ が起きていました。
その結果、
- ドキュメントには載っているメソッド
- AI が当然のように使っている API
が、自分の環境(.NET Framework)にはそもそも存在しない という状態になっていました。
初心者がやりがちな勘違い
当時の自分はこう思っていました。
- 「PowerShell = 最新の .NET が使える」
- 「Microsoft の公式ドキュメント = そのまま使える」
- 「メソッドが無い = 書き方が間違っている」
全部違いました。
実際は、
「そもそも存在しないメソッド」を呼んでいただけ
というオチでした。
公式ドキュメントの見方(初心者向け)
Microsoft のドキュメントは、
デフォルトで「最新の .NET」が選ばれていることが多いです。
初心者がまずやるべきことはこれだけです。
- ページ上部の「Version / Framework 切り替え」を探す
.NET Frameworkに切り替える- その上でメソッド一覧・サンプルコードを見る
これをしないと、
- 「ドキュメントにはあるのに使えない」
- 「IntelliSense に出てこない」
- 「実行すると
MethodNotFoundになる」
という状態になります。
「.NET」と「.NET Framework」のざっくり違い(初心者向けイメージ)
細かい話を抜きにして、初心者向けにざっくり言うと:
-
.NET Framework
- Windows 専用
- 昔からある
- Windows PowerShell 5.1 がこれの上で動いている
-
.NET(.NET 5 / 6 / 7 / 8 など)
- クロスプラットフォーム(Windows / Linux / macOS)
- 新しい世界
- PowerShell 7 はこちらを使う
なので、
-
Windows PowerShell 5.1 でコードを書く
- → .NET Framework の世界
-
PowerShell 7 でコードを書く
- → 最新 .NET の世界
という前提でドキュメントやサンプルを見分ける必要があります。
AI が出した PowerShell スクリプトの確認手順
実際に AI のコードを受け取ったときに、
今なら自分は次の順番で確認します。
1. PowerShell のバージョン確認
$PSVersionTable.PSVersion
ここで 5.1 が返ってきたら、
「これは .NET Framework 前提の世界だな」 と認識します。
2. 5.1 だったらこう考える
- 実行基盤は .NET Framework
- 最新 .NET の記事・サンプルはそのまま信じない
特に、
.NET 6.NET 7.NET 8
と書いてある記事は、
「自分の環境では使えない API を使っているかもしれない」 と疑います。
3. .NET Frameworkのドキュメント確認方法
- Microsoft Docs を開く
- バージョンを
.NET Frameworkに切り替える - そのメソッドが 実際に
.NET Frameworkの一覧にあるか確認する
という手順で確認します。
なければ、
「これは .NET Framework には存在しないメソッドだな」
と判断できるので、
- 代替メソッドを探す
- 実装を自前で書く
- そもそも PowerShell 7 への移行を検討する
といった判断がしやすくなります。
まとめ(初心者向け)
- PowerShell 5.1 は .NET Framework 上で動いている
- AI のコードは「最新 .NET」前提なことが多い
- 動かないときは コードそのものより「前提条件」を疑う
- 公式ドキュメントは 必ずバージョン/フレームワークの切り替えを確認する
「メソッドがない」「型がない」と怒られても、
「自分の環境(.NET Framework)にそのメソッドは存在するのか?」
を最初に確認するだけで、だいぶ楽になります。
おわりに
「AI が出したコードをどう確認すればいいのか分からない」
これは初心者なら普通のことだと思います。
でも、
- 自分の PowerShell の種類
- その PowerShell が使っている .NET(.NET Framework なのか、最新 .NET なのか)
この 2 つを知るだけで、
「何を確認すればいいか」
が見えるようになります。
同じところで詰まる人の、少しでも助けになれば嬉しいです。