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