Share via


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-CimInstanceCimCmdlets モジュールがセッションにインポートされます。

  • コマンドを実行する

    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-HelpMicrosoft.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 パラメーターは、セッション内の既存のコマンドを非表示にしたり置き換えたりするコマンドをインポートしません。

AliasCmdletFunction、Variable の各パラメーターImport-Moduleを使用して、インポートするコマンドのみを選択し、セッションで名前の競合を引き起こすコマンドを除外することもできます。

モジュール作成者は、モジュール マニフェストの DefaultCommandPrefix プロパティを使用して、すべてのコマンド名に既定のプレフィックスを追加することで、名前の競合を防ぐことができます。 Prefix パラメーターの値は、DefaultCommandPrefix の値よりも優先されます。

こちらもご覧ください