about_Modules

簡単な説明

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

長い説明

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

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

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

モジュールとは

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

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

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

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

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

  • コマンドを実行する

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

    Get-Command Get-CimInstance
    
  • 問い合わせの詳細

    Get-Help Get-CimInstance
    

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

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

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

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

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

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

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

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

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

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

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

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

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

モジュール フォルダー全体をモジュール ディレクトリにコピーします。 任意のメソッドを使用して、PowerShell だけでなく、Windows エクスプローラーやCmd.exeフォルダーをコピーできます。 PowerShell では、 コマンドレットを使用 Copy-Item します。 たとえば、 から Modules ディレクトリに MyModule 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-ModuleGet-Module」を参照してください

モジュール内のコマンドを検索する方法

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

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

Get-Command -Module <module-name>

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

Get-Command -Module BitsTransfer

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

モジュールのコマンド問い合わせを設定する方法

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

PowerShell 3.0 から、モジュールのヘルプ ファイルをダウンロードし、ヘルプ ファイルに更新プログラムをダウンロードして、古いファイルを使用しなくなりました。

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

Get-Help <command-name>

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

Get-Help <command-name> -Online

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

Update-Help -Module <module-name>

詳細については、 Get-HelpUpdate-Help に関するページを参照してください

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

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

Import-Moduleまた、インポートされたコマンドの名前に固有のプレフィックスを追加する Prefix パラメーターや 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

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

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

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

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

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

    注意

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

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

注意

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

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

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

$Env:PSModulePath

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

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

コマンドのセミコロン (;) は、リスト内のパスの前にあるパスから新しいパスを区切ります。

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

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

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

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

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

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

Linux または MacOS では、 コマンドのコロン (:) によって、新しいパスが一覧のその前のパスから分離されます。

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

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

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

PSModulePath 変数の詳細については、PSModulePath 変数にするページabout_Environment_Variables

モジュールと名前の競合

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

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

[非表示]

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

置換後

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

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

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

名前の競合を防ぐには、コマンドレット の NoClobber または Prefix パラメーターを使用 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 未承認の動詞が名前に含まれるコマンドレットまたは関数をエクスポートすると、次の警告メッセージが表示されます。

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

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

警告メッセージを抑制するには、 コマンドレット の DisableNameChecking パラメーターを使用 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.Archive
  • Microsoft.PowerShell.Core
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management
  • PackageManagement
  • PowerShellGet
  • PSDesiredStateConfiguration
  • PSDiagnostics
  • PSReadline

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

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

関連項目