about_Modules

簡単な説明

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

長い説明

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

コマンドを記述するとき、モジュールを利用してコマンドを整理したり、他者と共有したりできます。 モジュールを受け取るPeopleは、モジュール内のコマンドを PowerShell セッションに追加し、組み込みのコマンドと同じように使用できます。

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

モジュールとは

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

モジュールの自動読み込み

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

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

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

  • コマンドを実行する

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

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

    Get-Help Get-CimInstance
    

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

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

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

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

モジュールを使用する方法

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

  1. モジュールをインストールします。 (多くの場合、これは自動的に行われます。)
  2. モジュールにより追加されたコマンドを見つけます。
  3. モジュールにより追加されたコマンドを使用します。

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

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

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

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

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

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

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

Copy-Item -Path C:\ps-test\MyModule -Destination `
    $HOME\Documents\WindowsPowerShell\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 コマンドを非表示または置換するコマンドをモジュールが追加できないようにする NoClobber パラメーターなど、コマンドのパラメーターを使用できるようにモジュールをインポートすることもできます。

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

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

Import-Module <module-name>

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

Import-Module BitsTransfer

モジュールの既定の場所にないモジュールをインポートするには、コマンドでモジュール フォルダーの完全修飾パスを使用します。

たとえば、ディレクトリ内の 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 セッションにモジュールをインポートするには、 コマンドを 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 の場所は、 PowerShell\Modules ユーザー プロファイルの [ドキュメント ] の場所にあるフォルダーです。 その場所の特定のパスは、Windows のバージョンと、フォルダー リダイレクトを使用しているかどうかによって異なります。 Microsoft OneDrive では、 ドキュメント フォルダーの場所を変更することもできます。

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

    Note

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

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

Note

ディレクトリ内のファイルを $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"

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

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

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

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

モジュールと名前の競合

名前の競合は、セッションの複数のコマンドの名前が同じときに発生します。 モジュールのコマンドの名前がセッションのコマンドまたはアイテムの名前と同じとき、モジュールをインポートすると名前の競合が発生します。

名前が競合していると、コマンドが隠されたり、置換されたりします。

[非表示]

コマンド名を入力して実行されるコマンドと違う場合、コマンドが隠されています。ただし、別の方法でコマンドを実行できます。たとえば、出所のモジュールまたはスナップインの名前でコマンド名を修飾します。

置換後

実行できなければコマンドは置換されています。同じ名前のコマンドで上書きされたためです。 競合を引き起こしたモジュールを削除しても、セッションを再起動しなければ、置換されたコマンドは実行できません。

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

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

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

AliasCmdletFunction、および Variable パラメーター 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 スナップインの詳細については、「 about_PSSnapins」を参照してください。

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

警告: 一部のインポートされたコマンド名には、未承認の動詞が含まれており、見つけにくい場合があります。 詳細については Verbose パラメーターを使用するか、「Get-Verb」と入力して承認されている動詞の一覧を参照してください。

このメッセージは、単なる警告です。 実際には、非準拠のコマンドを含む、すべてのモジュールがインポートされます。 モジュール ユーザーにメッセージが表示されますが、名前付けの問題はモジュール作成者が解決する必要があります。

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

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

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

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

Note

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

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

  • CimCmdlets
  • Microsoft.PowerShell.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.ODataUtils
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management
  • PackageManagement
  • PowerShellGet
  • PSDesiredStateConfiguration
  • PSDiagnostics
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility
  • ISE

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

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

関連項目