about_Modules
簡単な説明
PowerShell モジュールをインストール、インポート、および使用する方法について説明します。
長い説明
モジュールは、コマンドレット、プロバイダー、関数、ワークフロー、変数、エイリアスなどの PowerShell メンバーを含むパッケージです。
コマンドを記述するとき、モジュールを利用してコマンドを整理したり、他者と共有したりできます。 モジュールを受け取るPeopleは、モジュール内のコマンドを 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
実行して、ドライブを含む Microsoft.WSMan.Management モジュールを WSMan:
インポートする必要があります。
コマンドを Import-Module
実行してモジュールをインポートし、 変数を $PSModuleAutoloadingPreference
使用してモジュールの自動インポートを有効、無効、および構成できます。 詳細については、「 about_Preference_Variables」を参照してください。
モジュールの使用方法
モジュールを使用するには、次のタスクを実行します。
- モジュールをインストールします。 (多くの場合、これは自動的に行われます。)
- モジュールにより追加されたコマンドを見つけます。
- モジュールにより追加されたコマンドを使用します。
このトピックでは、これらのタスクの実行方法について説明します。 モジュールの管理に関して役に立つその他の情報も含まれています。
モジュールをインストールする方法
ファイルが含まれるフォルダーとしてモジュールを受け取った場合は、PowerShell で使用する前に、そのモジュールをコンピューターにインストールする必要があります。
ほとんどのモジュールは自動的にインストールされます。 PowerShell には、いくつかのプレインストールされたモジュールが付属しています。 これは、コア モジュールと呼ばれることもあります。 Windows ベースのコンピューターでは、オペレーティング システムに含まれる機能に管理用のコマンドレットがある場合、それらのモジュールはプレインストールされます。 サーバー マネージャーの役割と機能の追加ウィザードや、コントロール パネルの [Windows 機能のオンとオフを切り替える] ダイアログ ボックスなどを使用して Windows 機能をインストールすると、その機能の一部である PowerShell モジュールがインストールされます。 他にも多くのモジュールがモジュールをインストールするインストーラーまたは設定プログラムで提供されます。
次のコマンドを使用して、現在のユーザーの Modules ディレクトリを作成します。
New-Item -Type Directory -Path $HOME\Documents\PowerShell\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
コマンドを非表示または置き換えるコマンドをモジュールが追加できないようにする 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 セッションにモジュールをインポートするには、PowerShell プロファイルに Import-Module
コマンドを追加します。
プロファイルの詳細については、「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
。注意
次のコマンドを使用して、Documents フォルダーの場所を確認できます。
[Environment]::GetFolderPath('MyDocuments')
AllUsers の場所は
$env:PROGRAMFILES\PowerShell\Modules
Windows 上にあります。 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>"
たとえば、PSModulePath 環境変数の値にディレクトリを追加/usr/local/Fabrikam/Modules
するには、次のように入力します。
$Env:PSModulePath += ":/usr/local/Fabrikam/Modules"
Linux または MacOS では、 コマンドのコロン (:
) によって、新しいパスがリスト内のパスの前にあるパスから分離されます。
PSModulePath にパスを追加すると、 Get-Module
Import-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 パラメーターは、セッション内の既存のコマンドを非表示にしたり置き換えたりするコマンドをインポートしません。
の Alias、Cmdlet、Function、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 コマンドの名前付け規則に従う必要があります。 インポートするモジュールが、名前に未承認の動詞を含むコマンドレットまたは関数をエクスポートする場合、コマンドレットは 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 では、次のモジュール (またはスナップイン) がインストールされます。
- 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 セッションでモジュール のログ記録を有効にすることもできます。 詳細については、ログ記録とグループ ポリシーに関する記事を参照してください。