about_Modules

簡単な説明

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Import-Module <module-name>

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

Import-Module BitsTransfer

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

たとえば、ディレクトリの TestCmdlets モジュール 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 セッションにモジュールをインポートするには、PowerShell プロファイルにコマンドを追加 Import-Module します。

プロファイルの詳細については、「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"

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 スナップインの詳細については、「PowerShell スナップイン」をabout_PSSnapins。

モジュールがエクスポートするコマンドは、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.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_EventLogs と about_Group_Policy_Settingsを参照してください

関連項目