about_Modules
簡単な説明
PowerShell モジュールをインストール、インポート、および使用する方法について説明します。
詳細な説明
PowerShell は、スクリプト言語とコマンド シェルです。 言語は、処理の構造とロジックを提供するキーワード (keyword)と、作業を実行するコマンドで構成されます。 PowerShell のコマンドは、スクリプト、関数、またはコマンドレットとして実装されます。
モジュールは、コマンドレット、プロバイダー、関数、変数、および 1 つのユニットとしてインポートできるその他の種類のリソースを含むことができる自己完結型の再利用可能なユニットです。
PowerShell には、モジュールの基本セットが付属しています。 必要に応じて、さらにモジュールをインストールすることもできます。 既定では、モジュールからコマンドを初めて使用すると、インストールされたモジュールが自動的に読み込まれます。 変数を $PSModuleAutoloadingPreference
使用して、モジュールの自動読み込みを有効、無効、および構成します。 詳細については、「about_Preference_Variables」を参照してください。
セッション中にアンロードまたは再読み込みを行うことができます。 コマンドレットを Remove-Module
使用して、セッションからモジュールをアンロードします。 コマンドレットを Import-Module
使用してモジュールを読み込みます。
モジュールは、C# で記述されたコンパイル済みの .NET アセンブリとして作成することも、PowerShell で記述されたスクリプト ベースのモジュールとして作成することもできます。 このトピックでは、PowerShell モジュールの使用方法について説明します。 PowerShell モジュールを記述する方法については、「PowerShell モジュールの作成」を参照してください。
Note
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-Module
Install-PSResource
にCurrentUser
モジュールをインストールした場合は、これらのコマンドレットによって現在のユーザーのフォルダーがModules
作成されます。 フォルダーが存在しない場合は、手動で作成できます。
次のコマンドを使用して、現在の Modules
ユーザーのフォルダーを作成します。
$folder = New-Item -Type Directory -Path $HOME\Documents\WindowsPowerShell\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 パラメーターは、セッション内の既存のコマンドを非表示にしたり置き換えたりするコマンドをインポートしません。
エイリアス、コマンドレット、関数、変数のImport-Module
各パラメーターを使用して、インポートするコマンドのみを選択することもできます。また、セッションで名前の競合を引き起こすコマンドを除外することもできます。
モジュール作成者は、モジュール マニフェストの DefaultCommandPrefix プロパティを使用して、すべてのコマンド名に既定のプレフィックスを追加することで、名前の競合を防ぐことができます。 Prefix パラメーターの値は、DefaultCommandPrefix の値よりも優先されます。
関連項目
PowerShell
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示