Skip to content

MS_PowerShellModuleVsSnapin

nishi_74322014 edited this page Aug 31, 2026 · 1 revision

PowerShell Module vs Snapin

概要

PowerShell は、PSSnapin と Module で拡張されます。

  • Windows の役割を追加すると、役割を管理する Cmdlet が一緒にインストールされます。
    また、何らかの製品をインストールした際に、PowerShell Cmdlet が追加でインストールされることもあります。

  • PowerShell コマンドプロンプトを開いた状態では、それらの追加された Cmdlet はまだ使用できません。
    PowerShell コマンドプロンプトの中で Add-PSSnapin あるいは Import-Module を使って読み込みます。

  • 読み込みの際に指定する PSSnapin 名、Module 名は、役割、製品の管理者用ドキュメントを参照してください。

補足(現在は明示的な読み込みが不要なことが多い): PowerShell 3.0 以降は
モジュールの自動読み込みが働くため、
Import-Module を書かなくても、コマンドレット名を打つだけで
対応するモジュールが自動的に読み込まれる。

ただし、次の場合は明示的に Import-Module する意味がある。

  • スクリプトの依存関係を明示したいとき
    (読み手にも、実行環境にも要件が伝わる)
  • #Requires -Modules ActiveDirectory と併せて、
    モジュールが無い環境での実行を早期に止めたいとき
  • モジュールが標準の検索パス($env:PSModulePath)の外にあるとき

詳細

Module

  • インストールされている module は、
    get-module -listavailable で確認することができる。

補足(モジュールの入手先): 現在は PowerShell ギャラリー(PSGallery)から
Install-Module で導入するのが一般的である。

Find-Module -Name SqlServer          # 探す
Install-Module -Name SqlServer -Scope CurrentUser
Get-Module -ListAvailable            # 導入済みを確認
Update-Module -Name SqlServer        # 更新

-Scope CurrentUser を付けると管理者権限なしで導入できる。
なお、PSGallery は既定で「信頼されていないリポジトリ」として扱われ、
確認プロンプトが出る。

Snapin

PowerShell 6.0 からドロップされている。

補足(両者の違いと、Snapin が廃れた理由): 両者は
どちらもコンパイル済みの Cmdlet を追加する仕組みだが、
導入方法が大きく異なる。

PSSnapin Module
実体 .NET アセンブリのみ アセンブリ/スクリプト/マニフェスト
導入 レジストリへの登録が必要installutil フォルダに置くだけ
必要な権限 管理者権限 不要(ユーザー スコープに置ける)
配布 難しい ファイル コピー/PSGallery
現況 PowerShell 6.0 で廃止 標準

つまり、Snapin はレジストリ登録という副作用を伴うため、
配布・可搬性・アンインストールのいずれでも Module に劣った。
PowerShell Core がクロスプラットフォームになった時点で、
レジストリ前提の仕組みは成立しなくなり、廃止された。

Windows PowerShell 5.1 では Snapin も引き続き動作するため、
古い製品(Exchange 2010 世代など)の管理スクリプトには残っている。
PowerShell 7 へ移行する際は、Snapin 依存が障壁になる点に注意。

参考

Import-Module

Add-PSSnapin

Module vs Snapin

PowerShell Cmdletの作り方

本 Wiki 内


Tags: シェル, インフラストラクチャ, Windows

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally