PowerShell オブジェクト指向コマンドライン
PowerShellと従来のコマンドライン(CMDやBashなど)の最大の違いは、PowerShellのコマンド出力がオブジェクトであり、プレーンテキストではないことです。
PowerShellは従来のコマンドラインよりも柔軟で強力であり、スクリプト作成やシステム管理をより効率的にします。
「オブジェクト指向コマンドライン」とは
従来のコマンドラインでは、コマンド間はパイプを通じて|渡されるのは文字列テキストであり、これらのテキストをさらに処理するには、通常grep、awk、sedなどのツールを利用する必要があります。
一方PowerShellでは、コマンド間でパイプを通じて渡されるのはオブジェクトであり、オブジェクトのプロパティやメソッドに直接アクセスできるため、テキストを解析する必要がなく、正確性と開発効率が大幅に向上します。
コマンドの出力はオブジェクト
以 Get-Processコマンドを例にします:
Get-Process
このコマンドは、現在システムで実行中のプロセス一覧を取得するために使用します。
Get-Processコマンドが返すのはプレーンテキストの表ではなく、一連の.NETオブジェクトであり、各プロセスはSystem.Diagnostics.Process型のオブジェクトです。
プログラミング言語のオブジェクトにアクセスするように、そのプロパティにアクセスできます。例:
(Get-Process)[0].Name
上記のコマンドは最初のプロセスの名前を取得するもので、出力例:
explorer
オブジェクトの構造を確認する:Get-Member
オブジェクトを深く理解するには、どのようなプロパティとメソッドがあるかを把握することが重要です。PowerShellにはGet-Memberオブジェクトの構造を調べるのに役立つコマンドが用意されています:
Get-Process | Get-Member
出力例の一部:
Name MemberType Definition
---- ---------- ----------
Id Property int Id {get;}
Name Property string Name {get;}
Kill Method void Kill()
Start Method void Start()
説明:
Propertyオブジェクトのプロパティを表します。例:Id、NameMethodオブジェクトのメソッドを表します。例:Kill()、Start()
これらのメンバーは、オブジェクト.プロパティ 或 オブジェクト.メソッド()の形式で使用できます。
オブジェクトのパイプライン受け渡し
パイプラインで渡されるのはオブジェクト
PowerShellでは、複数のコマンドが|で接続される場合、渡されるのはオブジェクトであり、テキストではありません。
つまり、後続のコマンドで前のコマンドから渡されたオブジェクトのプロパティに直接アクセスできます。
例:状態がRunningのサービスをすべてフィルタリングする:
Get-Service | Where-Object { $_.Status -eq 'Running' }
解説:
$_は現在のパイプライン内のオブジェクトを表しますStatusはサービスオブジェクトのプロパティです
パイプライン操作フローチャート(Mermaid)

よく使うオブジェクト処理コマンド
PowerShellには、オブジェクトを操作するための組み込みコマンドが多数用意されており、フィルタリング、並べ替え、グループ化、エクスポートなどの場面でよく使用されます:
| コマンド | 機能説明 |
|---|---|
Where-Object |
条件に基づいてオブジェクトをフィルタリング |
Select-Object |
オブジェクトのプロパティを選択または名前変更 |
Sort-Object |
特定のプロパティに基づいてオブジェクトを並べ替え |
Group-Object |
プロパティに基づいてオブジェクトをグループ化して集計 |
Measure-Object |
オブジェクトの数、合計、平均などを集計 |
Export-Csv |
オブジェクトをCSVファイルにエクスポート |
ConvertTo-Json |
オブジェクトをJSON形式の文字列に変換 |
オブジェクトのプロパティ選択と計算列
特定のプロパティを選択
Get-Process | Select-Object Name, Id, CPU
このコマンドは、各プロセスの名前、ID、CPU使用状況を抽出します。
計算列(カスタムプロパティ)の追加
スクリプトブロックを使用してカスタムプロパティを追加できます:
Get-Process | Select-Object Name, @{Name="MemoryMB";Expression={$_.WorkingSet / 1MB -as [int]}}
説明:
@{}ハッシュテーブルを作成して新しいプロパティを定義しますName新しい列名を指定しますExpression計算ロジックを提供します
並べ替えとグループ化操作
プロセスをCPU使用率で並べ替え
Get-Process | Sort-Object CPU -Descending
サービスの状態でグループ化
Get-Service | Group-Object Status
出力例:
Count Name Group
----- ---- -----
75 Running {WinDefend, WSearch, ...}
35 Stopped {Fax, Spooler, ...}
エクスポートと構造化データ
CSVファイルにエクスポート
Get-Service | Select-Object Name, Status | Export-Csv -Path services.csv -NoTypeInformation
JSON形式に変換
Get-Service | ConvertTo-Json
これらの形式は他のシステムやAPIとの統合を容易にし、自動化ワークフローの重要な部分です。
典型的な実用例
例1:CPUを最も消費する上位5プロセスを検索
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU
例2:サービス状態ごとに数を集計
Get-Service | Group-Object Status | Select-Object Name, Count
まとめとアドバイス
PowerShellのオブジェクト指向の特性により、コマンドライン操作はプログラミング設計の考え方により適合したものになります。オブジェクトのプロパティとメソッドを通じて、ユーザーはシステムリソースをより正確に操作し、より強力で信頼性の高い自動化スクリプトを構築できます。
初心者は以下の点から取り組んで基礎を固めることをお勧めします:
- を多用して
Get-Memberオブジェクトの構造を調べましょう - の使い方を
Where-ObjectとSelect-Objectしっかりマスターしましょう - を使って
Group-Object、Sort-Objectデータを処理してみましょう - コマンドの結果をCSVまたはJSONファイルにエクスポートしてみましょう