about_Modules
簡単な説明
PowerShell モジュールをインストール、インポート、および使用する方法について説明します。
詳細な説明
PowerShell は、コマンド シェルとスクリプト言語の両方です。 PowerShell のコマンドは、スクリプト、関数、またはコマンドレットとして実装されます。 この言語には keywordsが含まれており、処理の構造とロジック、およびその他のリソース (変数、プロバイダー、エイリアスなど) が提供されます。
モジュールは、コマンドレット、プロバイダー、関数、変数、およびその他のリソースを含めることができる自己完結型の再利用可能なユニットです。 既定では、モジュールからコマンドを初めて使用するときに、インストールされているモジュールが PowerShell によって自動的に読み込まれます。 変数 $PSModuleAutoloadingPreference
を使用して、モジュールの自動読み込み動作を構成できます。 詳細については、「 about_Preference_Variables」を参照してください。
PowerShell セッション中にモジュールを手動で読み込んだりアンロードしたりすることもできます。 モジュールを読み込むまたは再読み込みするには、 Import-Module
を使用します。 モジュールをアンロードするには、 Remove-Module
コマンドレットを使用します。
PowerShell には、モジュールの基本セットが含まれています。 C# または PowerShell スクリプト言語自体を使用して、誰でも新しいモジュールを作成できます。 C# でコンパイル済みの .NET アセンブリとして記述されたモジュールは、ネイティブ モジュールと呼ばれます。 PowerShell で記述されたモジュールは、スクリプト モジュールと呼ばれます。
この記事では、PowerShell モジュールの使用方法について説明します。 PowerShell モジュールを作成する方法については、「 PowerShell モジュールの作成」を参照してください。
Note
PowerShell 3.0 より前では、コマンドレットとプロバイダーは PowerShell スナップインにパッケージ化されていました。PowerShell 3.0 以降では、既定ですべてのセッションに Microsoft.PowerShell.Core スナップインが追加されます。 これは、PowerShell に残っている唯一のスナップインです。 他のすべてのスナップインはモジュールに変換されました。 新しいスナップインの作成はサポートされなくなりました。
既定のモジュールの場所
PowerShell は、モジュールを次の既定の場所に格納します。
- すべてのユーザー スコープ -
$env:ProgramFiles\WindowsPowerShell\Modules
- 現在のユーザー スコープ -
$HOME\Documents\WindowsPowerShell\Modules
- PowerShell に付属するモジュール -
$PSHOME\Modules
既定では、現在のユーザーの Modules
フォルダーは存在しません。 Install-Module
またはInstall-PSResource
を使用してCurrentUser
スコープにモジュールをインストールした場合、これらのコマンドレットによって現在のユーザーのModules
フォルダーが作成されます。 フォルダーが存在しない場合は、手動で作成できます。
次のコマンドを使用して、現在のユーザーの Modules
フォルダーを作成します。
$folder = New-Item -Type Directory -Path $HOME\Documents\WindowsPowerShell\Modules
これらの場所は、 $env:PSModulePath
環境変数に自動的に含まれます。 既定のモジュールの場所の詳細については、 about_PSModulePathを参照してください。
モジュールの自動読み込み
インストールされているモジュールからコマンドを初めて実行すると、PowerShell によってそのモジュールが自動的にインポート (読み込み) されます。 モジュールは、 $env:PSModulePath
環境変数で指定された場所に格納する必要があります。
モジュールの自動読み込みでは、セットアップやプロファイルの構成なしで、モジュール内のコマンドを使用できます。 次の各例では、Get-CimInstance
を含む CimCmdlets モジュールがセッションにインポートされます。
コマンドを実行する
Get-CimInstance Win32_OperatingSystem
コマンドを取得する
Get-Command Get-CimInstance
コマンドのヘルプを表示する
Get-Help Get-CimInstance
ワイルドカード文字 (*
) でGet-Command
を使用する場合、PowerShell はモジュールをインポートしません。 セッションで不要なモジュールを読み込まずに、コマンド検出にワイルドカードを使用できます。
モジュールを手動でインポートする
$env:PSModulePath
環境変数で指定された場所にモジュールがインストールされていない場合、またはモジュールがパッケージ化されたモジュールではなく、スタンドアロンの.dll
または.psm1
ファイルとして提供されている場合は、モジュールを手動でインポートする必要があります。
また、PowerShell プロバイダーを使用するコマンドは、モジュールを自動的にインポートしません。 たとえば、Get-PSSessionConfiguration
コマンドレットなど、WSMan:
ドライブを必要とするコマンドを使用する場合は、Import-Module
コマンドレットを実行して、WSMan:
ドライブを含む Microsoft.WSMan.Management モジュールをインポートする必要があります。
また、モジュールをセッションにインポートする方法を変更することもできます。 たとえば、Import-Module
の Prefix パラメーターは、モジュールからインポートされたコマンドレットの名詞部分に固有のプレフィックスを追加します。 NoClobber パラメーターを指定すると、モジュールはセッション内の既存のコマンドを非表示にしたり置き換えたりするコマンドを追加できなくなります。 詳細については、「 管理名の競合」を参照してください。
次の例では、 BitsTransfer モジュールを現在のセッションにインポートします。
Import-Module BitsTransfer
$env:PSModulePath
にないモジュールをインポートするには、モジュール フォルダーへの完全修飾パスを使用します。 たとえば、C:\ps-test
ディレクトリの TestCmdlets モジュールをセッションに追加するには、次のように入力します。
Import-Module C:\ps-test\TestCmdlets
モジュール フォルダーに含まれていないモジュール ファイルをインポートするには、コマンド内のモジュール ファイルへの完全修飾パスを使用します。 たとえば、 C:\ps-test
ディレクトリの TestCmdlets.dll モジュールをセッションに追加するには、次のように入力します。
Import-Module C:\ps-test\TestCmdlets.dll
セッションへのモジュールの追加の詳細については、「 Import-Module」を参照してください。
すべてのセッションの開始時にモジュールをインポートする
Import-Module
コマンドは、モジュールを現在の PowerShell セッションにインポートします。 開始するすべての PowerShell セッションにモジュールをインポートするには、 Import-Module
コマンドを PowerShell プロファイルに追加します。
プロファイルの詳細については、「about_Profiles」を参照してください。
発行済みモジュールをインストールする
発行済みモジュールは、PowerShell ギャラリーなどの登録済みリポジトリから使用できるモジュールです。 PowerShellGetMicrosoft.PowerShell.PSResourceGet モジュールと Microsoft.PowerShell.PSResourceGet モジュールは、登録されたリポジトリに PowerShell モジュールを検索、インストール、発行するためのコマンドレットを提供します。
PowerShellGet モジュールは、PowerShell 5.0 以降のリリースに含まれています。 Microsoft.PowerShell.PSResourceGet モジュールは PowerShell 7.4 以降のリリースに含まれており、PowerShell の推奨パッケージ マネージャーです。 Microsoft.PowerShell.PSResourceGet は、 PowerShellGet と並べて、古いバージョンの PowerShell にインストールできます。 PowerShell ギャラリーからモジュールをインストールするには、Install-Module
またはInstall-PSResource
コマンドレットを使用します。
Get-Command Install-Module, Install-PSResource
CommandType Name Version Source
----------- ---- ------- ------
Function Install-Module 2.9.0 PowerShellGet
Cmdlet Install-PSResource 1.0.0 Microsoft.PowerShell.PSResourceGet
詳細については、「 PowerShellGet の概要を参照してください。
モジュールを手動でインストールする
モジュールの内容を別のフォルダーからコピーすることで、モジュールを手動でインストールできます。 そのフォルダーは、ローカル コンピューター上の別の場所に配置することも、別のコンピューターにインストールすることもできます。 モジュールを手動でインストールするには、モジュール フォルダー全体を、 $env:PSModulePath
に含まれる新しい場所にコピーします。
PowerShell では、 Copy-Item
コマンドレットを使用します。 たとえば、次のコマンドを実行して、C:\PSTest
から MyModule
フォルダーをコピーします。
$modulePath = $HOME\Documents\PowerShell\Modules\MyModule
Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse
モジュールはどこにインストールしても構いませんが、モジュールの既定の場所にモジュールをインストールすれば、管理しやすくなります。
インストールされているモジュールを検索する
Get-Module
コマンドレットは、現在の PowerShell セッションに読み込まれた PowerShell モジュールを取得します。
Get-Module
一覧表示されているモジュールには、 $env:PSModulePath
からだけでなく、任意の場所からインポートされたモジュールを含めることができます。
次のコマンドを使用して、 $env:PSModulePath
にインストールされているモジュールを一覧表示します。
Get-Module -ListAvailable
このコマンドは、現在のセッションにインポートされるモジュールだけでなく、 $env:PSModulePath
にインストールされているすべてのモジュールを取得します。 このコマンドでは、他の場所にインストールされているモジュールは一覧表示されません。
詳細については、「 Get-Module」を参照してください。
モジュール内のコマンドを一覧表示する
Get-Command
コマンドレットを使用して、使用可能なすべてのコマンドを見つけます。 Get-Command
コマンドレットのパラメーターを使用して、モジュール、名前、名詞などのコマンドをフィルター処理できます。
モジュール内のすべてのコマンドを検索するには、次のように入力します。
Get-Command -Module <module-name>
たとえば、 BitsTransfer モジュールでコマンドを検索するには、次のように入力します。
Get-Command -Module BitsTransfer
Get-Command
コマンドレットの詳細については、「Get-Command」を参照してください。
モジュールの削除
モジュールを削除すると、モジュールが追加したコマンドがセッションから削除されます。 たとえば、次のコマンドは、現在のセッションから BitsTransfer モジュールを削除します。
Remove-Module BitsTransfer
モジュールを削除では、モジュールのインポートの反対の操作が行われます。 モジュールを削除しても、モジュールはアンインストールされません。 詳細については、「 Remove-Module」を参照してください。
コマンドは、モジュールとスナップインからセッションに追加できます。モジュールでは、コマンドレット、プロバイダー、関数、変数、エイリアス、PowerShell ドライブなどの項目など、すべての種類のコマンドを追加できます。 スナップインはコマンドレットとプロバイダーのみを追加できます。
セッションからモジュールを削除する前に、次のコマンドを使用して、削除するモジュールを決定します。
たとえば、次のコマンドを使用して、 Get-Date
コマンドレットと Get-Help
コマンドレットのソースを検索します。
Get-Command Get-Date, Get-Help -All |
Select-Object -Property Name, CommandType, Module ,PSSnapIn
次の出力は、 Get-Help
コマンドレットが Microsoft.PowerShell.Core スナップインにあることを示しています。 このスナップインをセッションから削除することはできません。
Name CommandType Module PSSnapIn
---- ----------- ------ --------
Get-Date Function
Get-Date Cmdlet Microsoft.PowerShell.Utility
Get-Help Cmdlet Microsoft.PowerShell.Core
Get-Date
には 2 つのソースがあります。 1 つは関数で、もう 1 つは Microsoft.PowerShell.Utility モジュールのコマンドレットです。 Remove-Module
を使用してモジュールを削除できます。 関数を削除するには、 Function:
ドライブから削除します。
Remove-Item Function:Get-Date
Function:
ドライブの詳細については、「about_Function_Provider」を参照してください。
名前の競合を管理する
名前の競合は、セッションの複数のコマンドの名前が同じときに発生します。 モジュールのコマンドの名前がセッションのコマンドまたはアイテムの名前と同じとき、モジュールをインポートすると名前の競合が発生します。
Import-Module
は、現在のセッションでコマンドを非表示にして置き換えるコマンドを追加する場合があります。 名前が競合していると、コマンドが隠されたり、置換されたりします。 コマンドの置換は、インポートされたモジュールにセッション内の既存のコマンドと同じ名前のコマンドが含まれている場合に発生します。 新しくインポートされたコマンドは、既存のコマンドよりも優先されます。
たとえば、セッションに同じ名前の関数とコマンドレットが含まれている場合、PowerShell は既定で関数を実行します。 セッションに種類と名前が同じコマンドが含まれるとき、たとえば、2 つのコマンドレットの名前が同じ場合、既定では追加された日が新しいほうのコマンドが実行されます。
優先順位規則の説明や非表示コマンドの実行手順など、詳細については、 about_Command_Precedenceを参照してください。
コマンド名を修飾することで、非表示または置換されたコマンドを実行できます。 コマンド名を修飾するには、目的のコマンドのバージョンを含むモジュールの名前を追加します。 次に例を示します。
Microsoft.PowerShell.Utility\Get-Date
モジュール名のプレフィックスで Get-Date
を実行すると、 Microsoft.PowerShell.Utility モジュールのバージョンが確実に実行されます。
名前の競合を検出するには、Get-Command
コマンドレットの All パラメーターを使用します。 既定では、 Get-Command
はコマンド名を入力したときに実行されるコマンドのみを取得します。 All パラメーターは、セッション内の特定の名前を持つすべてのコマンドを取得します。
名前の競合を防ぐには、Import-Module
コマンドレットの NoClobber または Prefix パラメーターを使用します。 Prefix パラメーターは、セッション内で一意になるように、インポートされたコマンドの名前にプレフィックスを追加します。 NoClobber パラメーターは、セッション内の既存のコマンドを非表示にしたり置き換えたりするコマンドをインポートしません。
Alias、Cmdlet、Function、および Variable Import-Module
パラメーターを使用して、インポートするコマンドのみを選択し、セッションで名前の競合を引き起こすコマンドを除外することもできます。
モジュール作成者は、モジュール マニフェストの DefaultCommandPrefix プロパティを使用して、すべてのコマンド名に既定のプレフィックスを追加することで、名前の競合を防ぐことができます。 Prefix パラメーターの値は、DefaultCommandPrefix の値よりも優先されます。
関連項目
PowerShell