はじめに
PowerShell を使いこなせるかどうかの分かれ目は、
「Windows が今どんな状態かを、正確に把握できるか」 にあります。
- 今、何が動いているのか
- どのサービスが常駐しているのか
- どんなユーザーが存在しているのか
本記事では、PowerShell を使って
Windows システムの“現在地”を把握する方法を解説します。
プロセスを知る:Get-Process
実行中のプロセス一覧
Get-Process
これは単なる一覧表示ではなく、
Process オブジェクトの集合を返します。
特定プロセスを確認
Get-Process -Name explorer
CPU 使用率で並び替える
Get-Process | Sort-Object CPU -Descending
- テキスト解析ではなく、
- CPU プロパティそのものを扱っている点が重要です。
プロセスの正体を知る
Get-Process | Get-Member
ここで確認できるもの:
- Name / Id / CPU / Path
- Kill(), CloseMainWindow() などのメソッド
👉 PowerShell は「プロセス管理 API」を直接操作しています。
サービスを知る:Get-Service
サービス一覧を取得
Get-Service
実行中のサービスのみ表示
Get-Service | Where-Object Status -eq Running
サービスの状態と意味
| 状態 | 意味 |
|---|---|
| Running | 常駐中 |
| Stopped | 停止 |
| Disabled | 無効化 |
👉 マルウェア対策・監査では
**「本来止まっているべきサービス」**が重要になります。
ユーザーを知る:Get-LocalUser
ローカルユーザー一覧
Get-LocalUser
パスワード不要のユーザーを確認
Get-LocalUser | Where-Object PasswordRequired -eq $false
👉 セキュリティ上、非常に重要な確認ポイントです。
SID を確認する
Get-LocalUser | Select Name, SID
SID とは?
- Windows 内部で使われる ユーザーの本体識別子
- 名前よりも SID が本体
有名な RID(末尾の数字)
| RID | 意味 |
|---|---|
| 500 | Administrator |
| 501 | Guest |
S-1-5-21-xxxx-xxxx-xxxx-501 → Guest
👉 名前を変えても SID は変わらない
👉 これが Windows の設計思想です。
ローカルグループを知る
Get-LocalGroup
グループは「権限の集合」
- Administrators
- Remote Desktop Users
- Backup Operators
👉 ユーザー単体より、所属グループが重要
管理者なのに自由に触れない理由
次のコマンドを実行すると驚く結果が出ます。
(Get-Acl C:\).Owner
結果:
NT SERVICE\TrustedInstaller
TrustedInstaller とは?
-
Windows 自身を守るための内部サービス
-
システム重要部分の 所有者
-
Administrator でも
-
OS の中枢は勝手に触れない
これは 意図されたセキュリティ設計です。
実務・セキュリティ視点での重要性
管理者・運用視点
- 不要なサービスが動いていないか
- 想定外のユーザーがいないか
- 権限設計が崩れていないか
セキュリティ視点
- 常駐プロセスの異常
- パスワード不要ユーザー
- 権限昇格の足がかり
👉 システムを知ること=攻撃も防御も理解すること
まとめ
- プロセス:
Get-Process - サービス:
Get-Service - ユーザー:
Get-LocalUser - 正体確認:SID とグループ
- Windows は 管理者すら制限する設計
PowerShell は、
Windows の内部構造を“見える化”する言語です。