次の方法で共有


モジュールについて

簡単な説明

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 にインストールできます。 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 の概要」を参照してください。

モジュールを手動でインストールする

モジュールがファイルを含むフォルダーとして受け取った場合は、PowerShell で使用する前にコンピューターにインストールする必要があります。

PowerShell には、いくつかのモジュールがプレインストールされています。 Windows ベースのコンピューターでは、多くの Windows 機能に機能を管理するためのモジュールが含まれています。 これらのモジュールは、機能がインストールされるとインストールされます。 その他のモジュールは、モジュールをインストールするインストーラーまたはセットアッププログラムに含まれている場合があります。

既定では、現在のユーザーの Modules フォルダーは存在しません。 CurrentUser または Install-Moduleを使用して Install-PSResource スコープにモジュールをインストールした場合、これらのコマンドレットは現在のユーザーの 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 プロバイダーを使用するコマンドは、モジュールを自動的にインポートしません。 たとえば、WSMan: コマンドレットなど、Get-PSSessionConfiguration ドライブを必要とするコマンドを使用する場合は、Import-Module コマンドレットを実行して、 ドライブを含む WSMan: モジュールをインポートする必要があります。

モジュールを手動でインポートする

$env:PSModulePath 環境変数で指定された場所にモジュールがインストールされていない場合、またはモジュールがパッケージ化されたモジュールではなくスタンドアロンの .dll または .psm1 ファイルとして提供されている場合は、モジュールを手動でインポートする必要があります。

また、モジュールをセッションにインポートする方法を変更することもできます。 たとえば、Import-Module パラメーターは、モジュールからインポートされたコマンドレットの名詞部分に固有のプレフィックスを追加します。 NoClobber パラメーターを指定すると、モジュールはセッション内の既存のコマンドを非表示にしたり置き換えたりするコマンドを追加できなくなります。 詳細については、「名前の競合管理する」を参照してください。

$env:PSModulePathにインストールされているモジュールをインポートするには、モジュール名を指定します。 たとえば、次のコマンドは BitsTransfer モジュールを現在のセッションにインポートします。

Import-Module BitsTransfer

$env:PSModulePathにないモジュールをインポートするには、モジュール フォルダーへの完全修飾パスを使用します。 たとえば、 ディレクトリの C:\ps-test モジュールをセッションに追加するには、次のように入力します。

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を参照してください。

インストールされているモジュールを検索する

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-Date コマンドレットと Get-Help コマンドレットのソースを検索します。

Get-Command Get-Date, Get-Help -All |
    Select-Object -Property Name, CommandType, Module ,PSSnapIn

次の出力は、 コマンドレットが 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を参照してください。

非表示にされたコマンドまたは置き換えられたコマンドを実行するには、コマンド名を修飾します。 コマンド名を修飾するには、必要なコマンドのバージョンを含む module の名前を追加します。 例えば次が挙げられます。

Microsoft.PowerShell.Utility\Get-Date

モジュール名のプレフィックスを使用して Get-Date を実行すると、Microsoft.PowerShell.Utility モジュールのバージョンが確実に実行されます。

名前の競合を検出するには、 コマンドレットの Get-Command パラメーターを使用します。 既定では、Get-Command はコマンド名を入力したときに実行されるコマンドのみを取得します。 All パラメーターは、セッション内の特定の名前を持つすべてのコマンドを取得します。

名前の競合を防ぐには、 コマンドレットの NoClobber または Import-Module パラメーターを使用します。 Prefix パラメーターは、セッション内で一意になるように、インポートされたコマンドの名前にプレフィックスを追加します。 NoClobber パラメーターは、セッション内の既存のコマンドを非表示にしたり置き換えたりするコマンドをインポートしません。

エイリアスコマンドレット関数、および Import-Module パラメーターを使用して、インポートするコマンドのみを選択し、セッションで名前の競合を引き起こすコマンドを除外することもできます。

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

こちらも参照ください