5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellの入り口:実は「.NET Framework」を触ってると気づいたら世界がつながった

Last updated at Posted at 2026-01-14

この記事で言いたいこと

PowerShell は「コマンドを打つツール」でもありますが、もう一つの顔は .NET(特に .NET Framework)の型・クラスをそのまま呼べる“プログラミング環境” ということです。
ここが腑に落ちると、PowerShell の理解が一気に進みます。

  • Get-ChildItem みたいなコマンドだけでなく
  • [System.IO.File]::ReadAllText() みたいに .NET のメソッドを直で呼んで
  • 強力な文字列処理・ファイル処理・HTTP・暗号化・XML/JSON などが使える

この記事では、

  • PowerShell と .NET Framework の関係
  • 静的メソッド/インスタンスの使い分け
  • どの .NET のドキュメントを見ればいいか

を、初心者目線で整理します。

PowerShellと.NET Frameworkの関係

PowerShellは「.NETの上に乗ってる」

PowerShell で扱っている値は、だいたいが .NET のオブジェクトです。

例:Get-Date の戻り値は文字列ではなく、.NET の DateTime 型です。

$d = Get-Date
$d.GetType().FullName
# System.DateTime

つまり PowerShell は、

  • 「文字列をつなぐ世界」

ではなく、

  • 型とメソッドを持ったオブジェクトの世界

だと捉えた方が理解しやすくなります。

.NET Frameworkとは何か

一言でいうと:

Windows 向けに長く使われてきた .NET の実行環境&巨大な標準ライブラリ

  • 実行環境:C# などで書いたプログラムを動かす仕組み(CLR)
  • 標準ライブラリSystem.IOSystem.NetSystem.Xml など、便利機能の塊

PowerShell(特に Windows PowerShell 5.1)は、この .NET Framework を前提に作られています。

なんでPowerShellで.NET Frameworkを使うのか

結論はシンプルで、

車輪の再発明をしなくていいから

です。

PowerShell 単体のコマンドでは届かないところを、.NET のライブラリで一撃で埋められます。

便利ポイントの例

  • ファイル操作:高速・細かい制御が可能
  • 文字列/正規表現:.NET 由来で強力
  • HTTP/暗号化:標準で揃っている
  • XML/JSON:オブジェクトとして扱える
  • OS API:必要なら Win32 まで届く

PowerShell からこれらを「そのまま呼べる」のが強みです。

「どんな言語で書かれてるの?」問題

  • .NET Framework 自体:主に C# などで実装(内部には C++ なども混ざる)
  • PowerShell の世界:あなたが書いているのは PowerShell スクリプト

でも実際には、

PowerShell スクリプトから .NET クラス(C# 由来など)を呼んでいる

という構図になっています。

重要なのは「中身の実装言語」よりも、

“型と API(クラス/メソッド)を呼んでいる”

という見方です。ここを押さえると、理解が一気に進みます。

まずここを押さえると理解が進む(最短ルート)

1) PowerShellは“オブジェクトのパイプ”だと知る

Get-Process | Get-Member

Get-Member で「プロパティ」「メソッド」が見えます。

  • Name
  • Id
  • Kill() などのメソッド

→ ここが 「.NET オブジェクトの世界」に入る入口 です。

2) 型名(クラス名)を見に行く癖をつける

(Get-Process | Select-Object -First 1).GetType().FullName

ここで出てくる

  • System.Diagnostics.Process
  • System.IO.FileInfo

のような クラス名を意識する癖をつけると、後からドキュメントを引きやすくなります。

3) .NETの静的メソッドを使ってみる(超重要)

PowerShell で 「.NET を使ってる感」 が一番出るのがここです。

静的メソッド・静的プロパティの使い方(PowerShellの“必修”)

書き方

  • 静的メソッド[クラス名]::メソッド(引数)
  • 静的プロパティ[クラス名]::プロパティ

例1:ファイルを一発で読む(.NET)

$text = [System.IO.File]::ReadAllText("C:\temp\a.txt")
$text

例2:パス結合(地味に便利)

$path = [System.IO.Path]::Combine("C:\temp", "a.txt")
$path

例3:環境情報(静的プロパティ)

[Environment]::MachineName
[Environment]::OSVersion

インスタンス(newして使う)との違い

インスタンスが必要なケース

**「状態を持つもの」**は new して使うことが多いです。

例:文字列を効率よく連結する StringBuilder

$sb = [System.Text.StringBuilder]::new()
$null = $sb.AppendLine("Hello")
$null = $sb.AppendLine("World")
$sb.ToString()

ここでのポイントは:

  • ::「クラスに直接アクセス」
  • .(ドット)は 「インスタンスのメンバーにアクセス」

という役割分担です。

この 2 つが分かると、PowerShell のコードが一気に読みやすくなります。

「.NETのドキュメント、どれを見ればいい?」問題

ここはかなりハマりポイントです。

まず結論

  • Windows PowerShell 5.1
    .NET Framework の API を見ることが多い
  • PowerShell 7+
    .NET(いわゆる .NET / .NET Core 系)の API を見ることが多い

自分のPowerShellがどっちか確認

$PSVersionTable

# 目安:
# - Windows PowerShell は 5.1 系
# - PowerShell 7+ は 7.x 系

ドキュメント参照のコツ(迷子防止)

  1. クラス名を特定するGetType() / Get-Member
  2. Microsoft Learn の該当クラスページを開く
  3. バージョン/対象フレームワークの表示に注意
    • 古い環境だとメソッドが無いことがある

あなたが感じた

「ドキュメントにあるのに自分の環境ではメソッドが無い」

は、だいたい ここ(対象 .NET の違い)が原因です。

PowerShellで.NETを使うときの頻出パターン集

型を明示したい

[int]$n = 10
[datetime]$dt = Get-Date

型変換(キャスト)

[int]"123"
[datetime]"2026-01-14"

例外(.NET例外)がそのまま飛んでくる

try {
  [System.IO.File]::ReadAllText("C:\nope.txt")
} catch {
  $_.Exception.GetType().FullName
  $_.Exception.Message
}

ここで見えているのも、.NET の例外オブジェクトです。

まとめ:PowerShellの“入り口”は.NETだと割り切ると楽

  • PowerShell の正体は 「.NET オブジェクトをパイプで流す言語」
  • Get-MemberGetType()オブジェクト世界の地図になる
  • ::(静的)と .(インスタンス)を分けて理解すると、成長が一気に加速する
  • ドキュメントは 「自分の PowerShell がどの .NET 前提か」 を先に確認する

「PowerShell が難しい」のではなく、

「.NET の世界を触っている」と自覚できていないだけ

というケースも多いです。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?