簡単な説明
PowerShell モジュールをインストール、インポート、および使用する方法について説明します。
長い説明
モジュールは、コマンドレット、プロバイダー、関数、ワークフロー、変数、エイリアスなどの PowerShell コマンドを含むパッケージです。
コマンドを作成するユーザーは、モジュールを使用してコマンドを整理し、他のユーザーと共有できます。 モジュールを受け取ったユーザーは、モジュール内のコマンドを 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 コマンドレットを実行して、 ドライブを含む WSMan: モジュールをインポートする必要があります。
引き続き Import-Module コマンドを実行してモジュールをインポートし、 $PSModuleAutoloadingPreference 変数を使用してモジュールの自動インポートを有効、無効、および構成できます。 詳細については、about_Preference_Variablesを参照してください。
モジュールの使用方法
モジュールを使用するには、次のタスクを実行します。
- モジュールをインストールします。 (これはよく行われます。
- モジュールが追加したコマンドを見つけます。
- モジュールが追加したコマンドを使用します。
このトピックでは、これらのタスクを実行する方法について説明します。 また、モジュールの管理に関するその他の有用な情報も含まれています。
モジュールのインストール方法
モジュールがファイルを含むフォルダーとして受け取った場合は、PowerShell で使用する前にコンピューターにインストールする必要があります。
ほとんどのモジュールは自動的にインストールされます。 PowerShell には、"コア" モジュールと呼ばれることもあるいくつかのモジュールがプレインストールされています。 Windows ベースのコンピューターでは、オペレーティング システムに含まれる機能にそれらを管理するためのコマンドレットがある場合、それらのモジュールはプレインストールされています。 たとえば、サーバー マネージャーの役割と機能の追加ウィザードや、コントロール パネルの [Windows 機能をオンまたはオフにする] ダイアログ ボックスを使用して Windows 機能をインストールすると、機能の一部であるすべての PowerShell モジュールがインストールされます。 他の多くのモジュールは、モジュールをインストールするインストーラーまたはセットアップ プログラムに含まれています。
次のコマンドを使用して、現在のユーザーの Modules ディレクトリを作成します。
New-Item -Type Directory -Path $HOME\Documents\WindowsPowerShell\Modules
モジュール フォルダ全体を Modules ディレクトリにコピーします。 フォルダをコピーするには、Windowsエクスプローラーや Cmd.exe、PowerShellなど、任意の方法を使用できます。 PowerShell では、Copy-Item コマンドレットを使用します。 たとえば、MyModule フォルダを Modules ディレクトリから C:\ps-test\MyModule にコピーするには、次のように入力します。
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 パラメーターなど、 コマンドのパラメーターを使用できるようにすることもできます。
モジュールをインポートするには、 Import-Module コマンドレットを使用します。
PSModulePath の場所にあるモジュールを現在のセッションにインポートするには、次のコマンド形式を使用します。
Import-Module <module-name>
たとえば、次のコマンドは BitsTransfer モジュールを現在のセッションにインポートします。
Import-Module BitsTransfer
デフォルトのモジュール・ロケーションにないモジュールをインポートするには、コマンドでモジュール・フォルダへの完全修飾パスを使用します。
たとえば、 C:\ps-test ディレクトリの TestCmdlets モジュールをセッションに追加するには、次のように入力します。
Import-Module C:\ps-test\TestCmdlets
モジュールフォルダに含まれていないモジュールファイルをインポートするには、コマンドでモジュールファイルへの完全修飾パスを使用します。
たとえば、C:\ps-test ディレクトリの TestCmdlets.dll モジュールをセッションに追加するには、次のように入力します。
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-Module コマンドと Import-Module コマンドには、そのパスにモジュールが含まれます。
設定した値は、現在のセッションにのみ影響します。 変更を永続化するには、PowerShell プロファイルにコマンドを追加するか、コントロール パネルの [システム] を使用してレジストリの PSModulePath 環境変数の値を変更します。
また、変更を永続化するために、System.Environment クラスの SetEnvironmentVariable メソッドを使用して、PSModulePath 環境変数に Path を追加することもできます。
PSModulePath 変数の詳細については、「about_Environment_Variables」を参照してください。
モジュールと名前の競合
名前の競合は、セッション内の複数のコマンドの名前が同じである場合に発生します。 モジュール内のコマンドがセッション内のコマンドまたは項目と同じ名前を持つ場合、モジュールをインポートすると名前の競合が発生します。
名前の競合により、コマンドが非表示または置換される可能性があります。
隠れた
コマンド名を入力したときに実行されるコマンドではない場合、コマンドは非表示になりますが、コマンド名をモジュールまたはスナップインの名前で修飾するなど、別の方法を使用して実行できます。
交換
コマンドは、同じ名前のコマンドによって上書きされたために実行できない場合に置き換えられます。 競合の原因となったモジュールを削除しても、セッションを再起動しない限り、置き換えられたコマンドを実行することはできません。
Import-Module は、現在のセッションでコマンドを非表示にして置き換えるコマンドを追加する場合があります。 また、セッション内のコマンドでは、モジュールが追加したコマンドを非表示にすることができます。
名前の競合を検出するには、 コマンドレットの Get-Command パラメーターを使用します。 PowerShell 3.0 以降では、コマンド名を入力したときに実行されるコマンドのみが取得 Get-Command 。
All パラメーターは、セッション内の特定の名前を持つすべてのコマンドを取得します。
名前の競合を防ぐには、 コマンドレットの NoClobber または 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 スナップインの詳細については、「 about_PSSnapins」を参照してください。
モジュール関連の警告とエラー
モジュールがエクスポートするコマンドは、PowerShell コマンドの名前付け規則に従う必要があります。 インポートするモジュールが、名前に承認されていない動詞を含むコマンドレットまたは関数をエクスポートする場合、 Import-Module コマンドレットは次の警告メッセージを表示します。
警告: 一部のインポートされたコマンド名には未承認の動詞が含まれており、見つけにくくなることがあります。 詳細または型 Get-Verb の詳細パラメーターを使用して、承認済みの動詞の一覧を表示します。
このメッセージは、警告のみです。 完全なモジュールは、準拠していないコマンドを含め、引き続きインポートされます。 メッセージはモジュール ユーザーに表示されますが、モジュールの作成者が名前付けの問題を修正する必要があります。
警告メッセージを非表示にするには、 コマンドレットの Import-Module パラメーターを使用します。
組み込みモジュールとスナップイン
PowerShell 2.0 と PowerShell 3.0 以降の古いスタイルのホスト プログラムでは、PowerShell と共にインストールされるコア コマンドは、すべての PowerShell セッションに自動的に追加されるスナップインにパッケージ化されます。
PowerShell 3.0 以降では、 InitialSessionState.CreateDefault2 初期セッション状態 API を実装するホスト プログラムの場合、Microsoft.PowerShell.Core スナップインが既定ですべてのセッションに追加されます。 モジュールは初回使用時に自動的にロードされます。
注
リモート セッション ( New-PSSession コマンドレットを使用して開始されるセッションを含む) は、組み込みコマンドがスナップインにパッケージ化されている古いスタイルのセッションです。
次のモジュール (またはスナップイン) は、PowerShell と共にインストールされます。
- Microsoft.PowerShell.アーカイブ
- マイクロソフト.PowerShell.コア
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management (英語)
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.セキュリティ
- Microsoft.PowerShell.ユーティリティ
- Microsoft.WSMan.Management
- パッケージ管理
- PowerShellの取得
- PSDesiredStateConfiguration
- PSRリードライン
- PSScheduledジョブ
- PSWorkflowの
- PSWorkflowユーティリティ
- 伊勢
モジュール イベントのログ記録
PowerShell 3.0 以降では、モジュールとスナップインの LogPipelineExecutionDetails プロパティを $True に設定することで、PowerShell モジュールとスナップインのコマンドレットと関数の実行イベントを記録できます。
また、グループ ポリシー設定の [モジュール ログを有効にする] を使用して、すべての PowerShell セッションでモジュール ログを有効にすることもできます。 詳細については、「 about_EventLogs 」および 「about_Group_Policy_Settings」を参照してください。
こちらもご覧ください
about_DesiredStateConfiguration