次の方法で共有


モジュールについて

簡単な説明

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

長い説明

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

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

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

モジュールとは

モジュールとはコマンドのパッケージです。 セッション内のすべてのコマンドレットとプロバイダーは、モジュールまたはスナップインによって追加されます。

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

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

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

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

  • コマンドを実行する

    Get-Mailbox -Identity Chris
    
  • コマンドを取得する

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

    Get-Help Get-Mailbox
    

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

PowerShell モジュールの既定の場所を次に示します。 PowerShell 4.0 以降では、DSC の導入により、新しい既定のモジュールと DSC リソース フォルダーが導入されました。 DSC の詳細については、「 about_DesiredStateConfiguration」を参照してください。

  • システム: $PSHOME\Modules または ($env:windir\System32\WindowsPowerShell\v1.0\Modules) システム モジュールは、Windows と PowerShell に付属しているモジュールです。

    PowerShell 4.0 以降では、PowerShell Desired State Configuration (DSC) が導入されると、PowerShell に含まれる DSC リソースも フォルダーの に$PSHOME\Modules$PSHOME\Modules\PSDesiredStateConfiguration\DSCResources格納されます。

  • 現在のユーザー: $HOME\Documents\WindowsPowerShell\Modules ($env:UserProfile\Documents\WindowsPowerShell\Modules)

    または

    $HOME\My Documents\WindowsPowerShell\Modules ($env:UserProfile\My Documents\WindowsPowerShell\Modules)

    これは、PowerShell 4.0 より前のユーザーが追加したモジュールの場所です。

PowerShell 4.0 以降のリリースの PowerShell では、ユーザーが追加したモジュールと DSC リソースが に C:\Program Files\WindowsPowerShell\Modules格納されます。 この場所のモジュールと DSC リソースには、コンピューターのすべてのユーザーがアクセスできます。 DSC エンジンはローカル システムとして実行され、 などの $home\Documents\WindowsPowerShell\Modulesユーザー固有のパスにアクセスできなかったため、この変更が必要でした。

PowerShell 5.0 以降では、PowerShellGet モジュールが追加され、コミュニティと Microsoft が作成したリソースのPowerShell ギャラリーを使用して、Install-Moduleモジュールと DSC リソースが既定で にC:\Program Files\WindowsPowerShell\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"

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

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

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

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

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

注意

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

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

  • 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
  • PSReadline
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility
  • ISE

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

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

参照

about_Command_Precedence

about_DesiredStateConfiguration

about_EventLogs

about_Group_Policy_Settings

about_PSSnapins

Get-Command

Get-Help

Get-Module

Import-Module

Remove-Module