PowerShell コアコンセプト

PowerShell は単なるコマンドラインツールではなく、その設計思想、機能アーキテクチャ、そして使用方法が従来の Shell とは著しく異なります。


一、Cmdlet:最小のコマンド単位

Cmdlet とは?

Cmdlet(発音はcommand-let)は PowerShell の中でもっとも基本的なコマンド単位で、すべて .NET のクラスに基づいており、実行後は 1 つまたは複数の.NET オブジェクト。

命名規則:動詞-名詞

すべての Cmdlet は次の動詞-名詞命名規則に従います。例:

Cmdlet 意味
Get-Process プロセス情報を取得する
Set-Item リソース項目の値を設定する
Remove-Item ファイルやレジストリ項目などを削除する
New-User 新しいユーザーを作成する(AD モジュールがインストールされている場合)

PowerShell には数百の Cmdlet が付属しており、サードパーティのモジュールでさらにカスタマイズできます。

例

Get-Service
Get-ChildItem -Path C:\Windows

また、次のコマンドを使用してGet-Command利用可能なすべての Cmdlet を表示できます:

Get-Command -CommandType Cmdlet

二、オブジェクトパイプライン(Object Pipeline)

UNIX/Linux のパイプラインとの違いは?

従来の Shell では、パイプライン(|)はテキスト文字列を渡します。一方、PowerShell では、パイプラインは完全な .NET オブジェクトを渡します。

つまり、構造化データ(プロパティやメソッド)を保持したまま後続の処理を行うことができます。

例:CPU 使用率でプロセスをフィルタリング

Get-Process | Where-Object { $_.CPU -gt 100 } | Select-Object Name, CPU

上記のコマンドでは:

  • Get-Processすべてのプロセスを取得(オブジェクトを返す)
  • Where-ObjectCPU 使用率が 100 より大きいプロセスをフィルタリング
  • Select-Objectのみ出力NameとCPUフィールド

パイプラインでオブジェクトを渡す素晴らしさ

使用する必要はありませんawk、cut、grepなどのツールで出力を「解析」する必要はなく、直接オブジェクトのプロパティを操作できます。


三、Provider と PSDrive:リソースドライブの抽象化

PowerShell は統一されたリソースアクセス方法を提供します:Provider モデルこれはさまざまなリソースを仮想ドライブ(PSDrive)にマッピングし、あたかもC:ドライブのように操作できます。

一般的な Provider の種類

Provider ドライブの例 説明
FileSystem C:, D: ローカルファイルシステム
Registry HKLM:, HKCU: Windows レジストリ
Environment Env: 環境変数
Certificate Cert: 証明書ストア
Function Function: 現在のセッション内の関数
Variable Variable: 現在定義されている変数
Alias Alias: コマンドエイリアス

例:レジストリを操作する

Get-ChildItem HKLM:\Software\Microsoft

フォルダーを参照するようにレジストリを参照できます。


四、スクリプトとモジュール:整理と再利用

スクリプト(.ps1)

  • PowerShell スクリプトは.ps1を拡張子とするテキストファイルです
  • 一連のコマンド、フロー制御、関数などを含みます

モジュール(.psm1 / .psd1)

モジュールは PowerShell で再利用するための機能単位で、次のようなものがあります:

  • 1 つの.psm1ファイル(モジュールスクリプト)
  • 次を含む.psd1マニフェストを含むフォルダー(高度なモジュール)

モジュールは以下をサポートします:

  • 自動読み込み(その関数を使用したときに自動的に読み込まれる)
  • バージョン管理
  • 依存関係の宣言

システム内のすべてのモジュールを表示:

Get-Module -ListAvailable

モジュールのインポート:

Import-Module Az

五、実行ポリシー(Execution Policy)

悪意のあるスクリプトの実行を防ぐため、PowerShell は実行ポリシー(Execution Policy)を導入しています。これは.ps1スクリプトファイルの実行を制限します。

一般的なポリシーの種類

ポリシー 意味
Restricted デフォルト。スクリプトの実行は一切許可されません
RemoteSigned ローカルスクリプトの実行を許可し、リモートスクリプトには署名が必要
AllSigned すべてのスクリプトに署名が必要
Bypass 無制限。本番環境での使用は推奨されません

実行ポリシーの設定

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

⚠️ 注意:実行ポリシーはスクリプトファイルにのみ影響し、手動で入力したコマンドは制限しません。


六、リモート管理(PowerShell Remoting)

PowerShell Remoting はWS-MAN(WinRM ベース) 或 SSHプロトコルを使用して、別のコンピューターにリモート接続しコマンドを実行できます。

WinRM を有効にする(Windows の場合)

Enable-PSRemoting -Force

よく使うコマンド

# 建立远程会话
Enter-PSSession -ComputerName Server01

# 批量执行命令
Invoke-Command -ComputerName Server01,Server02 -ScriptBlock { Get-Service }

SSH 対応のクロスプラットフォームリモート

Enter-PSSession -HostName linux01 -User user1 -SSHTransport

七、Desired State Configuration(DSC)

DSC(Desired State Configuration)は PowerShell の宣言型構成プラットフォームですシステムの「理想的な状態」を定義するために使用されます。

これにより、次のことが可能です:

  • 構成スクリプトでリソースの状態を定義する(例:サービスが起動している、ファイルが存在するなど)
  • マシンをその状態に自動的に構成する
  • 逸脱をチェックし自動的に修復する

使用方法

  1. 構成ファイルを作成し(.ps1)
  2. MOF ファイルにコンパイル
  3. Push または Pull モードで展開する

DSC は大規模なサーバー構成、コンプライアンスチェック、自動デプロイメントに特に適しています。


八、コマンド検出とヘルプシステム

PowerShell には豊富なヘルプシステムがあり、コマンドを簡単に探索できます:

  • Get-Help Get-Process:コマンドのヘルプを表示
  • Get-Command:すべてのコマンドを一覧表示
  • Get-Member:オブジェクトのプロパティとメソッドを表示
  • Get-Help about_*:組み込みのナレッジドキュメントを表示(例:about_Execution_Policies)

例:オブジェクト構造を確認する

Get-Process | Get-Member

まとめ

概念 キーワード 概要
Cmdlet 動詞-名詞 最小の実行単位。.NET ベース
パイプライン ` ` テキストではなくオブジェクトを渡す
Provider FileSystem, Env: さまざまなリソースを統一的にアクセス
モジュール .psm1, .psd1 再利用可能なコマンド集を整理
実行ポリシー Set-ExecutionPolicy スクリプトの実行権限を制御
リモート管理 Enter-PSSession リモートでコマンドを実行
DSC Configuration 宣言型システム構成プラットフォーム
ヘルプシステム Get-Help 組み込みのドキュメントシステム
その他の拡張