次の方法で共有


モジュールについて

簡単な説明

PowerShell モジュールをインストール、インポート、および使用する方法について説明します。

長い説明

モジュールは、コマンドレット、プロバイダー、関数、ワークフロー、変数、エイリアスなどの PowerShell メンバーを含むパッケージです。

コマンドを作成するユーザーは、モジュールを使用してコマンドを整理し、他のユーザーと共有できます。 モジュールを受け取ったユーザーは、モジュール内のコマンドを PowerShell セッションに追加し、組み込みコマンドと同様に使用できます。

このトピックでは、PowerShell モジュールの使用方法について説明します。 PowerShell モジュールの記述方法については、「 PowerShell モジュールの記述」を参照してください。

モジュールとは?

モジュールは、コマンドレット、プロバイダー、関数、ワークフロー、変数、エイリアスなどの PowerShell メンバーを含むパッケージです。 このパッケージのメンバーは、PowerShell スクリプト、コンパイル済み DLL、またはその両方の組み合わせで実装できます。 これらのファイルは通常、1つのディレクトリにまとめられています。 詳細については、SDK ドキュメントの「 Windows PowerShell モジュールについて 」を参照してください。

モジュールの自動ロード

PowerShell 3.0 以降、PowerShell は、インストールされているモジュールでコマンドを初めて実行するときに、モジュールを自動的にインポートします。 これで、セットアップやプロファイル構成なしでモジュール内のコマンドを使用できるようになったため、モジュールをコンピューターにインストールした後でモジュールを管理する必要がなくなりました。

モジュール内のコマンドも見つけやすくなっています。 Get-Command コマンドレットは、インストールされているすべてのモジュールのすべてのコマンドを、まだセッションにない場合でも取得するようになりました。 コマンドを見つけて、最初にモジュールをインポートする必要なく、インポートせずに使用できます。

次の各例では、 Get-CimInstance を含む CimCmdlets モジュールがセッションにインポートされます。

  • コマンドを実行する

    Get-CimInstance Win32_OperatingSystem
    
  • コマンドを取得する

    Get-Command Get-CimInstance
    
  • コマンドのヘルプを表示する

    Get-Help Get-CimInstance
    

Get-Command ワイルドカード文字 (*) を含むコマンドは、検出用であり、使用せず、モジュールをインポートしないと見なされます。

PSModulePath 環境変数で指定された場所に格納されているモジュールのみが自動的にインポートされます。 他の場所にあるモジュールは、 Import-Module コマンドレットを実行してインポートする必要があります。

また、PowerShell プロバイダーを使用するコマンドでは、モジュールは自動的にインポートされません。 たとえば、Get-PSSessionConfiguration コマンドレットなど、WSMan: ドライブを必要とするコマンドを使用する場合、Import-Module コマンドレットを実行して、 ドライブを含む WSMan: モジュールをインポートする必要があります。

引き続き Import-Module コマンドを実行してモジュールをインポートし、 $PSModuleAutoloadingPreference 変数を使用してモジュールの自動インポートを有効、無効、および構成できます。 詳細については、about_Preference_Variablesを参照してください。

モジュールの使用方法

モジュールを使用するには、次のタスクを実行します。

  1. モジュールをインストールします。 (これはよく行われます。
  2. モジュールが追加したコマンドを見つけます。
  3. モジュールが追加したコマンドを使用します。

このトピックでは、これらのタスクを実行する方法について説明します。 また、モジュールの管理に関するその他の有用な情報も含まれています。

モジュールのインストール方法

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

ほとんどのモジュールは自動的にインストールされます。 PowerShell には、 コア モジュールと呼ばれることもあるいくつかのモジュールがプレインストールされています。 Windows ベースのコンピューターでは、オペレーティング システムに含まれる機能にそれらを管理するためのコマンドレットがある場合、それらのモジュールはプレインストールされています。 たとえば、サーバー マネージャーの役割と機能の追加ウィザードや、コントロール パネルの [Windows 機能をオンまたはオフにする] ダイアログ ボックスを使用して Windows 機能をインストールすると、機能の一部であるすべての PowerShell モジュールがインストールされます。 他の多くのモジュールは、モジュールをインストールするインストーラーまたはセットアップ プログラムに含まれています。

次のコマンドを使用して、現在のユーザーの Modules ディレクトリを作成します。

New-Item -Type Directory -Path $HOME\Documents\PowerShell\Modules

モジュール フォルダ全体を Modules ディレクトリにコピーします。 フォルダをコピーするには、Windowsエクスプローラーや Cmd.exe、PowerShellなど、任意の方法を使用できます。 PowerShell では、Copy-Item コマンドレットを使用します。 たとえば、MyModule フォルダを Modules ディレクトリから C:\ps-test\MyModule にコピーするには、次のように入力します。

Copy-Item -Path C:\ps-test\MyModule -Destination `
    $HOME\Documents\PowerShell\Modules

モジュールは任意の場所にインストールできますが、モジュールを既定のモジュールの場所にインストールすると、管理が容易になります。 既定のモジュールの場所の詳細については 、「モジュールと DSC リソースの場所」および「PSModulePath 」セクションを参照してください。

インストールされているモジュールの見つけ方

デフォルトのモジュール・ロケーションにインストールされているが、まだセッションにインポートされていないモジュールを検索するには、次のように入力します。

Get-Module -ListAvailable

セッションに既にインポートされているモジュールを見つけるには、PowerShell プロンプトで次のように入力します。

Get-Module

Get-Module コマンドレットの詳細については、「Get-Module」を参照してください。

モジュール内のコマンドを見つける方法

Get-Command コマンドレットを使用して、使用可能なすべてのコマンドを見つけます。 Get-Command コマンドレットのパラメーターを使用して、モジュール、名前、名詞などのコマンドをフィルター処理できます。

モジュール内のすべてのコマンドを検索するには、次のように入力します。

Get-Command -Module <module-name>

たとえば、BitsTransfer モジュール内のコマンドを検索するには、次のように入力します。

Get-Command -Module BitsTransfer

Get-Command コマンドレットの詳細については、「Get-Command」を参照してください。

モジュール内のコマンドのヘルプを取得する方法

モジュールにエクスポートするコマンドのヘルプ ファイルが含まれている場合、 Get-Help コマンドレットはヘルプ トピックを表示します。 PowerShell の任意のコマンドのヘルプを取得するために使用するのと同じ Get-Help コマンド形式を使用します。

PowerShell 3.0 以降では、モジュールのヘルプ ファイルをダウンロードし、ヘルプ ファイルの更新プログラムをダウンロードして、古いものにならないようにすることができます。

モジュール内のコマンドのヘルプを表示するには、次のように入力します。

Get-Help <command-name>

モジュール内のコマンドに関するヘルプをオンラインで表示するには、次のように入力します。

Get-Help <command-name> -Online

モジュール内のコマンドのヘルプ・ファイルをダウンロードしてインストールするには、次のように入力します。

Update-Help -Module <module-name>

詳細については、「 Get-Help 」および 「Update-Help」を参照してください。

モジュールをインポートする方法

モジュールのインポートまたはモジュールファイルのインポートが必要な場合があります。 インポートは、 モジュールが PSModulePath 環境変数 ( $env:PSModulePath) で指定された場所にインストールされていない場合、またはモジュールがフォルダーとして配信される一般的なモジュールではなく、.dll ファイルや .psm1 ファイルなどのファイルで構成されている場合に必要です。

また、モジュールをインポートして、インポートされたすべてのコマンドの名詞名に特徴的なプレフィックスを追加する Prefix パラメーターや、セッション内の既存のコマンドを非表示または置き換えるコマンドをモジュールが追加できないようにする Import-Module パラメーターなど、 コマンドのパラメーターを使用できるようにすることもできます。

モジュールをインポートするには、 Import-Module コマンドレットを使用します。

PSModulePath の場所にあるモジュールを現在のセッションにインポートするには、次のコマンド形式を使用します。

Import-Module <module-name>

たとえば、次のコマンドは BitsTransfer モジュールを現在のセッションにインポートします。

Import-Module BitsTransfer

デフォルトのモジュール・ロケーションにないモジュールをインポートするには、コマンドでモジュール・フォルダへの完全修飾パスを使用します。

たとえば、 C:\ps-test ディレクトリの TestCmdlets モジュールをセッションに追加するには、次のように入力します。

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

モジュールを削除する方法

モジュールを削除すると、モジュールが追加したコマンドがセッションから削除されます。

セッションからモジュールを削除するには、次のコマンド形式を使用します。

Remove-Module <module-name>

たとえば、次のコマンドは、現在のセッションから BitsTransfer モジュールを削除します。

Remove-Module BitsTransfer

モジュールを削除すると、モジュールのインポート操作が逆になります。 モジュールを削除しても、モジュールはアンインストールされません。 詳細については、「Remove-Module」を参照してください。

モジュールと DSC リソースの場所、および PSModulePath

$env:PSModulePath 環境変数には、モジュールとリソースを検索するために検索されるフォルダーの場所の一覧が含まれています。

既定では、$env:PSModulePath に割り当てられる有効な場所は次のとおりです。

  • システム全体の場所: $PSHOME\Modules

    これらのフォルダーには、Windows と PowerShell に付属するモジュールが含まれています。

    PowerShell に含まれる DSC リソースは、 $PSHOME\Modules\PSDesiredStateConfiguration\DSCResources フォルダーに格納されます。

  • ユーザー固有のモジュール: これらは、ユーザーのスコープ内でユーザーによってインストールされたモジュールです。 Install-Module には、現在のユーザーまたはすべてのユーザーにモジュールをインストールするかどうかを指定できる Scope パラメーターがあります。 詳細については、「Install-Module」を参照してください。

    Windows 上のユーザー固有の CurrentUser の場所は、ユーザー プロファイルの Documents の場所にある PowerShell\Modules フォルダーです。 その場所の特定のパスは、Windowsのバージョンと、フォルダリダイレクトを使用しているかどうかによって異なります。 Microsoft OneDriveは、 ドキュメント フォルダの場所を変更することもできます。

    デフォルトでは、Windows 10 以降では、その場所は $HOME\Documents\PowerShell\Modules です。 Linux または Mac では、 CurrentUser の場所は $HOME/.local/share/powershell/Modules です。

    「ドキュメント」フォルダの場所は、次のコマンドを使用して確認できます。 [Environment]::GetFolderPath('MyDocuments')

  • AllUsers の場所は Windows では$env:PROGRAMFILES\PowerShell\Modulesです。 LinuxまたはMacでは、モジュールは /usr/local/share/powershell/Modulesに保存されます。

$env:Windir\System32 ディレクトリにファイルを追加または変更するには、[管理者として実行] オプションを使用して PowerShell を起動します。

PSModulePath 環境変数 $Env:PSModulePath の値を変更することで、システム上の既定のモジュールの場所を変更できます。 PSModulePath 環境変数は Path 環境変数をモデルにしており、同じ形式です。

デフォルトのモジュールの場所を表示するには、次のように入力します。

$Env:PSModulePath

デフォルトのモジュールの場所を追加するには、次のコマンド形式を使用します。

$Env:PSModulePath = $Env:PSModulePath + ";<path>"

コマンドのセミコロン (;) は、新しいパスをリストの前のパスから分離します。

たとえば、 C:\ps-test\Modules ディレクトリを追加するには、次のように入力します。

$Env:PSModulePath + ";C:\ps-test\Modules"

Linux または MacOS でデフォルトのモジュールの場所を追加するには、次のコマンド形式を使用します。

$Env:PSModulePath += ":<path>"

たとえば、 /usr/local/Fabrikam/Modules ディレクトリを PSModulePath 環境変数の値に追加するには、次のように入力します。

$Env:PSModulePath += ":/usr/local/Fabrikam/Modules"

Linux または MacOS では、コマンドのコロン (:) は、新しいパスをリスト内の先行するパスから区切ります。

PSModulePath にパスを追加すると、Get-Module コマンドと Import-Module コマンドには、そのパスにモジュールが含まれます。

設定した値は、現在のセッションにのみ影響します。 変更を永続化するには、PowerShell プロファイルにコマンドを追加するか、コントロール パネルの [システム] を使用してレジストリの PSModulePath 環境変数の値を変更します。

また、変更を永続化するために、System.Environment クラスの SetEnvironmentVariable メソッドを使用して、PSModulePath 環境変数に Path を追加することもできます。

PSModulePath 変数の詳細については、「about_Environment_Variables」を参照してください。

モジュールと名前の競合

名前の競合は、セッション内の複数のコマンドの名前が同じである場合に発生します。 モジュール内のコマンドがセッション内のコマンドまたは項目と同じ名前を持つ場合、モジュールをインポートすると名前の競合が発生します。

名前の競合により、コマンドが非表示または置換される可能性があります。

隠れた

コマンド名を入力したときに実行されるコマンドではない場合、コマンドは非表示になりますが、コマンド名をモジュールまたはスナップインの名前で修飾するなど、別の方法を使用して実行できます。

交換

コマンドは、同じ名前のコマンドによって上書きされたために実行できない場合に置き換えられます。 競合の原因となったモジュールを削除しても、セッションを再起動しない限り、置き換えられたコマンドを実行することはできません。

Import-Module は、現在のセッションでコマンドを非表示にして置き換えるコマンドを追加する場合があります。 また、セッション内のコマンドでは、モジュールが追加したコマンドを非表示にすることができます。

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

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

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

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

コマンドが非表示になっている場合でも、コマンド名に、そのコマンドが作成されたモジュールまたはスナップインの名前を修飾することで実行できます。

PowerShell コマンドの優先順位規則は、セッションに同じ名前のコマンドが含まれている場合に実行されるコマンドを決定します。

たとえば、セッションに同じ名前の関数とコマンドレットが含まれている場合、PowerShell は既定で関数を実行します。 同じ名前の同じ種類のコマンド (同じ名前の 2 つのコマンドレットなど) がセッションに含まれている場合、既定では、最後に追加されたコマンドが実行されます。

優先順位規則の説明や非表示コマンドの実行手順など、詳細については、about_Command_Precedenceを参照してください。

モジュールとスナップイン

モジュールとスナップインからセッションにコマンドを追加できます。モジュールでは、コマンドレット、プロバイダー、関数、変数、エイリアス、PowerShell ドライブなどの項目など、すべての種類のコマンドを追加できます。 スナップインでは、コマンドレットとプロバイダーのみを追加できます。

セッションからモジュールまたはスナップインを削除する前に、次のコマンドを使用して、削除するコマンドを決定します。

セッション内のコマンドレットのソースを検索するには、次のコマンド形式を使用します。

Get-Command <cmdlet-name> | Format-List -Property verb,noun,pssnapin,module

たとえば、Get-Date コマンドレットのソースを検索するには、次のように入力します。

Get-Command Get-Date | Format-List -Property verb,noun,module

モジュールがエクスポートするコマンドは、PowerShell コマンドの名前付け規則に従う必要があります。 インポートするモジュールが、名前に承認されていない動詞を含むコマンドレットまたは関数をエクスポートする場合、 Import-Module コマンドレットは次の警告メッセージを表示します。

警告: 一部のインポートされたコマンド名には未承認の動詞が含まれており、見つけにくくなることがあります。 詳細または型 Get-Verb の詳細パラメーターを使用して、承認済みの動詞の一覧を表示します。

このメッセージは、警告のみです。 完全なモジュールは、準拠していないコマンドを含め、引き続きインポートされます。 メッセージはモジュール ユーザーに表示されますが、モジュールの作成者が名前付けの問題を修正する必要があります。

警告メッセージを非表示にするには、 コマンドレットの Import-Module パラメーターを使用します。

組み込みモジュールとスナップイン

PowerShell 2.0 と PowerShell 3.0 以降の古いスタイルのホスト プログラムでは、PowerShell と共にインストールされるコア コマンドは、すべての PowerShell セッションに自動的に追加されるスナップインにパッケージ化されます。

PowerShell 3.0 以降では、 InitialSessionState.CreateDefault2 初期セッション状態 API を実装するホスト プログラムの場合、Microsoft.PowerShell.Core スナップインが既定ですべてのセッションに追加されます。 モジュールは初回使用時に自動的にロードされます。

リモート セッション ( New-PSSession コマンドレットを使用して開始されるセッションを含む) は、組み込みコマンドがスナップインにパッケージ化されている古いスタイルのセッションです。

次のモジュール (またはスナップイン) は、PowerShell と共にインストールされます。

  • CimCmdlets
  • Microsoft.PowerShell.アーカイブ
  • マイクロソフト.PowerShell.コア
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management (英語)
  • Microsoft.PowerShell.セキュリティ
  • Microsoft.PowerShell.ユーティリティ
  • Microsoft.WSMan.Management
  • パッケージ管理
  • PowerShellの取得
  • PSDesiredStateConfiguration
  • PSDiagnosticsの
  • PSRリードライン

モジュール イベントのログ記録

PowerShell 3.0 以降では、モジュールとスナップインの LogPipelineExecutionDetails プロパティを $True に設定することで、PowerShell モジュールとスナップインのコマンドレットと関数の実行イベントを記録できます。 また、グループ ポリシー設定の [モジュール ログを有効にする] を使用して、すべての PowerShell セッションでモジュール ログを有効にすることもできます。 詳細については、ログ記録とグループ ポリシーに関する記事を参照してください。

こちらも参照ください