PowerShell モジュールをインストールする
PowerShell モジュールを作成したら、モジュールをシステムにインストールして、自分や他のユーザーがモジュールを使用できるようにする必要があります。 一般に、これはモジュール ファイル (つまり、.psm1
、バイナリ アセンブリ、モジュール マニフェスト、およびその他の関連ファイル) をそのコンピューター上のディレクトリにコピーすることで構成されます。 非常に小さなプロジェクトの場合、Windows エクスプローラーでファイルをコピーして 1 台のリモート コンピューターに貼り付けるのと同じくらい簡単な場合があります。ただし、大規模なソリューションの場合は、より高度なインストール プロセスを使用する必要があります。 モジュールをシステムに取り込む方法に関係なく、PowerShell では、ユーザーがモジュールを見つけて使用できるようにするさまざまな手法を使用できます。 そのため、インストールの主な問題は、PowerShell がモジュールを見つけられるようになることです。 詳細については、「PowerShell モジュールのインポート」を参照してください。
モジュールのインストールに関する規則
次の情報は、独自に作成するモジュール、他の関係者から入手したモジュール、他のユーザーに配布するモジュールなど、すべてのモジュールに関連します。
PSModulePath にモジュールをインストールする
可能な限り、PSModulePath 環境変数にリストされているパスにすべてのモジュールをインストールするか、PSModulePath 環境変数の値にモジュール パスを追加します。
PSModulePath 環境変数 ($Env:PSModulePath
) には、Windows PowerShell モジュールの場所が含まれています。 コマンドレットは、モジュールを見つけるためにこの環境変数の値に依存します。
既定では、PSModulePath 環境変数の値には、次のシステム およびユーザー モジュール ディレクトリが含まれていますが、値を追加および編集できます。
$PSHOME\Modules
(%windir%\System32\WindowsPowerShell\v1.0\Modules
)警告
この場所は、Windows に付属するモジュール用に予約されています。 この場所にモジュールをインストールしないでください。
$HOME\Documents\WindowsPowerShell\Modules
(%HOMEDRIVE%%HOMEPATH%\Documents\WindowsPowerShell\Modules
)$Env:ProgramFiles\WindowsPowerShell\Modules
(%ProgramFiles%\WindowsPowerShell\Modules
)PSModulePath 環境変数の値を取得するには、次のいずれかのコマンドを使用します。
$Env:PSModulePath [Environment]::GetEnvironmentVariable("PSModulePath")
PSModulePath 環境変数値の値にモジュール パスを追加するには、次のコマンド形式を使用します。 この形式では、System.Environment クラスの SetEnvironmentVariable メソッドを使用して、PSModulePath 環境変数にセッションに依存しない変更を行います。
#Save the current value in the $p variable. $p = [Environment]::GetEnvironmentVariable("PSModulePath") #Add the new path to the $p variable. Begin with a semi-colon separator. $p += ";C:\Program Files (x86)\MyCompany\Modules\" #Add the paths in $p to the PSModulePath value. [Environment]::SetEnvironmentVariable("PSModulePath",$p)
重要
PSModulePath パスを追加したら、変更に関する環境メッセージをブロードキャストする必要があります。 変更をブロードキャストすると、シェルなどの他のアプリケーションが変更を受け取ることができます。 変更をブロードキャストするには、製品のインストール コードに、文字列 "Environment" に
lParam
設定された WM_SETTINGCHANGE メッセージを送信させます。 モジュールのインストール コードが PSModulePath 更新された後、必ずメッセージを送信してください。
正しいモジュール ディレクトリ名を使用する
整形式モジュールは、モジュール ディレクトリ内の少なくとも 1 つのファイルのベース名と同じ名前を持つディレクトリに格納されるモジュールです。 モジュールが整形式でない場合、Windows PowerShell ではモジュールとして認識されません。
ファイルの "基本名" は、ファイル名拡張子のない名前です。 整形式のモジュールでは、モジュール ファイルを含むディレクトリの名前が、モジュール内の少なくとも 1 つのファイルのベース名と一致している必要があります。
たとえば、サンプルの Fabrikam モジュールでは、モジュール ファイルを含むディレクトリの名前は "Fabrikam" で、少なくとも 1 つのファイルには "Fabrikam" ベース名が付けられます。 この場合、Fabrikam.psd1 と Fabrikam.dll の両方に "Fabrikam" ベース名があります。
C:\Program Files
Fabrikam Technologies
Fabrikam Manager
Modules
Fabrikam
Fabrikam.psd1 (module manifest)
Fabrikam.dll (module assembly)
インストールが正しくない場合の影響
モジュールが整形式ではなく、その場所が PSModulePath 環境変数の値に含まれていない場合、次のような Windows PowerShell の基本的な検出機能は機能しません。
モジュールの自動読み込み機能では、モジュールを自動的にインポートできません。
Get-Module コマンドレットの
ListAvailable
パラメーターでモジュールが見つかりません。Import-Module コマンドレットでモジュールが見つかりません。 モジュールをインポートするには、ルート モジュール ファイルまたはモジュール マニフェスト ファイルへの完全なパスを指定する必要があります。
次のような追加機能は、モジュールがセッションにインポートされない限り機能しません。 PSModulePath 環境変数の整形式モジュールでは、モジュールがセッションにインポートされていない場合でも、これらの機能が機能します。
Get-Command コマンドレットは、モジュール内のコマンドを見つけることができません。
Update-Help コマンドレットと Save-Help コマンドレットは、モジュールのヘルプを更新または保存できません。
Show-Command コマンドレットは、モジュール内のコマンドを見つけて表示できません。
モジュール内のコマンドは、Windows PowerShell Integrated Scripting Environment (ISE) の [
Show-Command
] ウィンドウに表示されません。
モジュールをインストールする場所
このセクションでは、Windows PowerShell モジュールをインストールするファイル システムの場所について説明します。 場所は、モジュールの使用方法によって異なります。
特定のユーザーのモジュールのインストール
独自のモジュールを作成するか、Windows PowerShell コミュニティ Web サイトなどの別のパーティからモジュールを取得し、モジュールをユーザー アカウントでのみ使用できるようにする場合は、モジュールをユーザー固有の Modules ディレクトリにインストールします。
$HOME\Documents\WindowsPowerShell\Modules\<Module Folder>\<Module Files>
既定では、ユーザー固有の Modules ディレクトリが PSModulePath 環境変数の値に追加されます。
プログラム ファイル内のすべてのユーザーのモジュールのインストール
コンピューター上のすべてのユーザー アカウントでモジュールを使用できるようにする場合は、プログラム ファイルの場所にモジュールをインストールします。
$Env:ProgramFiles\WindowsPowerShell\Modules\<Module Folder>\<Module Files>
注
プログラム ファイルの場所は、Windows PowerShell 4.0 以降では、既定で PSModulePath 環境変数の値に追加されます。 以前のバージョンの Windows PowerShell では、プログラム ファイルの場所 (%ProgramFiles%\WindowsPowerShell\Modules) を手動で作成し、前述のように PSModulePath 環境変数にこのパスを追加できます。
製品ディレクトリへのモジュールのインストール
モジュールを他のパーティに配布する場合は、前述の既定の Program Files の場所を使用するか、%ProgramFiles% ディレクトリの独自の会社固有または製品固有のサブディレクトリを作成します。
たとえば、架空の会社である Fabrikam Technologies は、Fabrikam Manager 製品用の Windows PowerShell モジュールを出荷しています。 モジュール インストーラーは、Fabrikam Manager 製品サブディレクトリに Modules サブディレクトリを作成します。
C:\Program Files
Fabrikam Technologies
Fabrikam Manager
Modules
Fabrikam
Fabrikam.psd1 (module manifest)
Fabrikam.dll (module assembly)
Windows PowerShell モジュール検出機能を有効にして Fabrikam モジュールを見つけるには、Fabrikam モジュール インストーラーによって、モジュールの場所が PSModulePath 環境変数の値に追加されます。
$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam Technologies\Fabrikam Manager\Modules\"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)
共通ファイル ディレクトリへのモジュールのインストール
1 つのモジュールが製品の複数のコンポーネントまたは製品の複数のバージョンによって使用される場合は、モジュールを %ProgramFiles%\Common Files\Modules サブディレクトリのモジュール固有のサブディレクトリにインストールします。
次の例では、Fabrikam モジュールが %ProgramFiles%\Common Files\Modules
サブディレクトリの Fabrikam サブディレクトリにインストールされています。 各モジュールは、Modules サブディレクトリ内の独自のサブディレクトリに存在することに注意してください。
C:\Program Files
Common Files
Modules
Fabrikam
Fabrikam.psd1 (module manifest)
Fabrikam.dll (module assembly)
次に、インストーラーによって、PSModulePath 環境変数の値に、Common Files\Modules
サブディレクトリのパスが含まれていることが保証されます。
$m = $Env:ProgramFiles + '\Common Files\Modules'
$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$q = $p -split ';'
if ($q -notcontains $m) {
$q += ";$m"
}
$p = $q -join ';'
[Environment]::SetEnvironmentVariable("PSModulePath", $p)
モジュールの複数のバージョンのインストール
同じモジュールの複数のバージョンをインストールするには、次の手順を使用します。
- モジュールの各バージョンのディレクトリを作成します。 ディレクトリ名にバージョン番号を含めます。
- モジュールのバージョンごとにモジュール マニフェストを作成します。 マニフェストの ModuleVersion キーの値に、モジュールのバージョン番号を入力します。 マニフェスト ファイル (
.psd1
) をモジュールのバージョン固有のディレクトリに保存します。 - 次の例に示すように、PSModulePath 環境変数の値にモジュール ルート フォルダー パスを追加します。
モジュールの特定のバージョンをインポートするには、エンド ユーザーは、Import-Module コマンドレットの MinimumVersion
または RequiredVersion
パラメーターを使用できます。
たとえば、Fabrikam モジュールがバージョン 8.0 および 9.0 で使用できる場合、Fabrikam モジュールのディレクトリ構造は次のようになります。
C:\Program Files
Fabrikam Manager
Fabrikam8
Fabrikam
Fabrikam.psd1 (module manifest: ModuleVersion = "8.0")
Fabrikam.dll (module assembly)
Fabrikam9
Fabrikam
Fabrikam.psd1 (module manifest: ModuleVersion = "9.0")
Fabrikam.dll (module assembly)
インストーラーは、両方のモジュール パスを PSModulePath 環境変数の値に追加します。
$p = [Environment]::GetEnvironmentVariable("PSModulePath")
$p += ";C:\Program Files\Fabrikam\Fabrikam8;C:\Program Files\Fabrikam\Fabrikam9"
[Environment]::SetEnvironmentVariable("PSModulePath",$p)
これらの手順が完了すると、Get-Module コマンドレットの ListAvailable パラメーターが両方の Fabrikam モジュールを取得します。 特定のモジュールをインポートするには、Import-Module コマンドレットの MinimumVersion
または RequiredVersion
パラメーターを使用します。
両方のモジュールが同じセッションにインポートされ、モジュールに同じ名前のコマンドレットが含まれている場合、最後にインポートされたコマンドレットはセッションで有効になります。
コマンド名の競合の処理
モジュールがエクスポートするコマンドがユーザーのセッションのコマンドと同じ名前である場合、コマンド名の競合が発生する可能性があります。
セッションに同じ名前のコマンドが 2 つ含まれている場合、Windows PowerShell では、優先されるコマンドの種類が実行されます。 同じ名前と同じ種類の 2 つのコマンドがセッションに含まれている場合、Windows PowerShell は、最後にセッションに追加されたコマンドを実行します。 既定では実行されないコマンドを実行するには、ユーザーはモジュール名でコマンド名を修飾できます。
たとえば、セッションに Get-Date
関数と Get-Date
コマンドレットが含まれている場合、Windows PowerShell は既定で関数を実行します。 コマンドレットを実行するには、次のようなモジュール名でコマンドの前に記述します。
Microsoft.PowerShell.Utility\Get-Date
名前の競合を防ぐために、モジュール作成者はモジュール マニフェストで DefaultCommandPrefix キーを使用して、モジュールからエクスポートされるすべてのコマンドの名詞プレフィックスを指定できます。
ユーザーは、Import-Module
コマンドレットの Prefix パラメーターを使用して、代替プレフィックスを使用できます。
Prefix パラメーターの値は、DefaultCommandPrefix キーの値よりも優先されます。
Windows 以外のシステムでのサポート パス
Windows 以外のプラットフォームでは、パス区切り記号としてコロン (:
) 文字を使用し、ディレクトリ区切り記号としてスラッシュ (/
) 文字を使用します。
[System.IO.Path]
クラスには、任意のプラットフォームでコードを動作させるために使用できる静的メンバーがあります。
-
[System.IO.Path]::PathSeparator
- ホスト プラットフォームの PATH 環境変数でパスを分離するために使用される文字を返します。 -
[System.IO.Path]::DirectorySeparatorChar
- ホスト プラットフォームのパスでディレクトリ名を区切るために使用される文字を返します
パス文字列を構築するときに、;
文字と \
文字の代わりに、これらの静的プロパティを使用します。
こちらもご覧ください
Windows PowerShell モジュール の作成の
PowerShell