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-ModuleInstall-PSResourceCurrentUserモジュールをインストールした場合は、これらのコマンドレットによって現在のユーザーのフォルダーが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-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値よりも優先されます。

関連項目