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 の宣言型構成プラットフォームですシステムの「理想的な状態」を定義するために使用されます。
これにより、次のことが可能です:
- 構成スクリプトでリソースの状態を定義する(例:サービスが起動している、ファイルが存在するなど)
- マシンをその状態に自動的に構成する
- 逸脱をチェックし自動的に修復する
使用方法
- 構成ファイルを作成し(
.ps1) - MOF ファイルにコンパイル
- 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 |
組み込みのドキュメントシステム |