ja-JP/about_Modules.help.txt

TOPIC
    about_Modules

簡単な説明
    PowerShell モジュールのインストール、インポート、および使用方法を
    説明します。

詳細な説明
    PowerShell はコマンドシェルであり、スクリプト言語でもあります。PowerShell
    のコマンドは、スクリプト、関数、またはコマンドレットとして実装されます。
    この言語には、処理の構造と論理を提供するキーワードや、変数、プロバイダー、
    エイリアスなどのその他のリソースが含まれます。

    モジュールは、コマンドレット、プロバイダー、関数、変数、その他のリソースを
    含めることができる、自己完結型で再利用可能な単位です。既定では、PowerShell
    はモジュールのコマンドを初めて使うときに、インストール済みモジュールを
    自動的に読み込みます。自動モジュール読み込みの動作は、変数
    $PSModuleAutoLoadingPreference を使って構成できます。詳しくは
    about_Preference_Variables を参照してください。

    PowerShell セッション中に、モジュールを手動で読み込みまたは読み込み解除する
    こともできます。モジュールを読み込みまたは再読み込みするには Import-Module
    を使います。モジュールを読み込み解除するには Remove-Module コマンドレットを
    使います。

    PowerShell には基本的なモジュールのセットが含まれています。だれでも C# または
    PowerShell スクリプト言語自体を使って新しいモジュールを作成できます。C# で
    コンパイル済み .NET アセンブリとして記述されたモジュールはネイティブ
    モジュールと呼ばれます。PowerShell で記述されたモジュールはスクリプト
    モジュールと呼ばれます。

    この記事は PowerShell モジュールの使用方法を説明します。PowerShell モジュール
    の作成方法については、Writing a PowerShell Module を参照してください。

    注: PowerShell 3.0 より前は、コマンドレットとプロバイダーは PowerShell
    スナップインにパッケージ化されていました。PowerShell 3.0 以降では、
    Microsoft.PowerShell.Core スナップインが既定ですべてのセッションに追加
    されます。これは PowerShell に残っている唯一のスナップインです。他のすべての
    スナップインはモジュールに変換されました。新しいスナップインの作成は
    サポートされなくなりました。

既定のモジュールの場所

    PowerShell はモジュールを次の既定の場所に格納します。

    - Windows の場合
      - 全ユーザースコープ - $Env:ProgramFiles\PowerShell\Modules
      - 現在のユーザースコープ - $HOME\Documents\PowerShell\Modules
      - PowerShell に同梱されるモジュール - $PSHOME\Modules
    - Linux と macOS の場合
      - 全ユーザースコープ - /usr/local/share/powershell/Modules
      - 現在のユーザースコープ - $HOME/.local/share/powershell/Modules
      - PowerShell に同梱されるモジュール - $PSHOME/Modules

    既定では、現在のユーザーの Modules フォルダーは存在しません。Install-Module
    または Install-PSResource を使って CurrentUser スコープにモジュールを
    インストールすると、これらのコマンドレットが現在のユーザーの Modules
    フォルダーを作成します。フォルダーが存在しない場合は手動で作成できます。

    現在のユーザー用の Modules フォルダーを作成するには、次のコマンドを使います。

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

    これらの場所は $Env:PSModulePath 環境変数に自動的に含まれます。既定の
    モジュールの場所について詳しくは、about_PSModulePath を参照してください。

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

    インストール済みモジュールのコマンドを初めて実行すると、PowerShell はその
    モジュールを自動的にインポート (読み込み) します。モジュールは
    $Env:PSModulePath 環境変数で指定された場所に格納されている必要があります。

    モジュールの自動読み込みにより、セットアップやプロファイルの構成なしで
    モジュールのコマンドを使えます。次の各例は、Get-CimInstance を含む
    CimCmdlets モジュールをセッションにインポートします。

    - コマンドの実行

      Get-CimInstance Win32_OperatingSystem

    - コマンドの取得

      Get-Command Get-CimInstance

    - コマンドのヘルプの取得

      Get-Help Get-CimInstance

    Get-Command をワイルドカード文字 (*) と共に使う場合、PowerShell はモジュール
    をインポートしません。ワイルドカードを使って、セッションで不要かもしれない
    モジュールを読み込まずに、コマンドを検出できます。

モジュールの手動インポート

    モジュールの手動インポートは、モジュールが $Env:PSModulePath 環境変数で
    指定された場所にインストールされていない場合、またはモジュールがパッケージ化
    されたモジュールではなくスタンドアロンの .dll や .psm1 ファイルとして提供
    される場合に必要です。

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

    セッションでのモジュールのインポート方法を変更したい場合もあります。
    たとえば Import-Module の Prefix パラメーターは、モジュールからインポート
    されるコマンドレットの名詞部分に固有のプレフィックスを追加します。NoClobber
    パラメーターは、セッション内の既存のコマンドを隠したり置き換えたりする
    コマンドをモジュールが追加するのを防ぎます。詳しくは「名前の競合の管理」を
    参照してください。

    次の例は BitsTransfer モジュールを現在のセッションにインポートします。

    Import-Module BitsTransfer

    $Env:PSModulePath にないモジュールをインポートするには、モジュールフォルダー
    への完全修飾パスを使います。たとえば 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 セッションにモジュールを
    インポートするには、PowerShell プロファイルに Import-Module コマンドを
    追加します。

    プロファイルについて詳しくは、about_Profiles を参照してください。

公開済みモジュールのインストール

    公開済みモジュールは、PowerShell ギャラリーなどの登録済みリポジトリから
    入手できるモジュールです。PowerShellGet モジュールと
    Microsoft.PowerShell.PSResourceGet モジュールは、PowerShell モジュールの
    検索、インストール、登録済みリポジトリへの公開のためのコマンドレットを
    提供します。

    PowerShellGet モジュールは PowerShell 5.0 以降に含まれています。
    Microsoft.PowerShell.PSResourceGet モジュールは PowerShell 7.4 以降に含まれ、
    PowerShell の推奨パッケージマネージャーです。
    Microsoft.PowerShell.PSResourceGet は、古いバージョンの PowerShell でも
    PowerShellGet と並べてインストールできます。PowerShell ギャラリーから
    モジュールをインストールするには、Install-Module または Install-PSResource
    コマンドレットを使います。

    Get-Command Install-Module, Install-PSResource

    詳しくは PowerShellGet Overview を参照してください。

モジュールの手動インストール

    別のフォルダーからモジュールの内容をコピーして、モジュールを手動で
    インストールできます。そのフォルダーは、ローカルマシン上の別の場所にあっても、
    別のマシンにインストールされていてもかまいません。モジュールを手動で
    インストールするには、モジュールフォルダー全体を $Env:PSModulePath に含まれる
    新しい場所にコピーします。

    PowerShell では Copy-Item コマンドレットを使います。たとえば次のコマンドを
    実行して、C:\PSTest から MyModule フォルダーをコピーします。

    $modulePath = $HOME\Documents\PowerShell\Modules\MyModule
    Copy-Item -Path C:\PSTest\MyModule\* -Destination $modulePath -Recurse

    モジュールは任意の場所にインストールできますが、既定のモジュールの場所に
    インストールすると管理が容易になります。

インストール済みモジュールの検索

    Get-Module コマンドレットは、現在の PowerShell セッションに読み込まれている
    PowerShell モジュールを取得します。

    Get-Module

    一覧表示されるモジュールには、$Env:PSModulePath だけでなく、任意の場所から
    インポートされたモジュールが含まれることがあります。

    $Env:PSModulePath にインストールされているモジュールを一覧表示するには、
    次のコマンドを使います。

    Get-Module -ListAvailable

    このコマンドは、現在のセッションにインポートされたモジュールだけでなく、
    $Env:PSModulePath にインストールされているすべてのモジュールを取得します。
    このコマンドは、他の場所にインストールされているモジュールは一覧表示しません。

    詳しくは Get-Module を参照してください。

モジュール内のコマンドの一覧表示

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

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

    Get-Command -Module <module-name>

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

    Get-Command -Module BitsTransfer

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

モジュールの削除

    モジュールを削除すると、そのモジュールが追加したコマンドがセッションから
    削除されます。たとえば次のコマンドは、現在のセッションから BitsTransfer
    モジュールを削除します。

    Remove-Module BitsTransfer

    モジュールの削除は、モジュールのインポート操作を逆転させます。モジュールの
    削除は、モジュールをアンインストールするわけではありません。詳しくは
    Remove-Module を参照してください。

    コマンドはモジュールとスナップインからセッションに追加できます。モジュールは、
    コマンドレット、プロバイダー、関数などのあらゆる種類のコマンドや、変数、
    エイリアス、PowerShell ドライブなどの項目を追加できます。スナップインは
    コマンドレットとプロバイダーだけを追加できます。

    セッションからモジュールを削除する前に、次のコマンドを使って、削除したい
    モジュールを判別します。

    たとえば次のコマンドを使って、Get-Date と Get-Help コマンドレットのソースを
    検索します。

    Get-Command Get-Date, Get-Help -All |
        Select-Object -Property Name, CommandType, Module ,PSSnapIn

    Get-Date には 2 つのソースがあります。1 つは関数で、もう 1 つは
    Microsoft.PowerShell.Utility モジュールのコマンドレットです。モジュールは
    Remove-Module を使って削除できます。関数を削除するには、Function: ドライブ
    から削除できます。

    Remove-Item Function:Get-Date

    Function: ドライブについて詳しくは、about_Function_Provider を参照して
    ください。

名前の競合の管理

    名前の競合は、セッション内の複数のコマンドが同じ名前を持つときに発生します。
    モジュールをインポートすると、そのモジュール内のコマンドがセッション内の
    コマンドや項目と同じ名前を持つ場合に名前の競合が発生します。

    Import-Module は、現在のセッション内のコマンドを隠したり置き換えたりする
    コマンドを追加することがあります。名前の競合により、コマンドが隠されたり
    置き換えられたりすることがあります。コマンドの置き換えは、インポートした
    モジュールにセッション内の既存のコマンドと同じ名前のコマンドが含まれる場合に
    発生します。新しくインポートされたコマンドが既存のコマンドより優先されます。

    たとえばセッションに同じ名前の関数とコマンドレットが含まれる場合、PowerShell
    は既定で関数を実行します。セッションに同じ名前で同じ種類のコマンド (たとえば
    同じ名前の 2 つのコマンドレット) が含まれる場合、既定では最も新しく追加された
    コマンドを実行します。

    優先順位規則の説明や隠されたコマンドの実行方法を含む詳細については、
    about_Command_Precedence を参照してください。

    隠されたコマンドや置き換えられたコマンドは、コマンド名を修飾することで
    実行できます。コマンド名を修飾するには、実行したいバージョンのコマンドを
    含むモジュールの名前を追加します。例:

    Microsoft.PowerShell.Utility\Get-Date

    モジュール名のプレフィックスを付けて Get-Date を実行すると、
    Microsoft.PowerShell.Utility モジュールのバージョンが実行されることが
    保証されます。

    名前の競合を検出するには、Get-Command コマンドレットの All パラメーターを
    使います。既定では、Get-Command はコマンド名を入力したときに実行される
    コマンドだけを取得します。All パラメーターは、セッション内で指定した名前を
    持つすべてのコマンドを取得します。

    名前の競合を防ぐには、Import-Module コマンドレットの NoClobber または Prefix
    パラメーターを使います。Prefix パラメーターは、インポートされるコマンドの
    名前にプレフィックスを追加して、セッション内で一意にします。NoClobber
    パラメーターは、セッション内の既存のコマンドを隠したり置き換えたりする
    コマンドをインポートしません。

    Import-Module の Alias、Cmdlet、Function、Variable パラメーターを使って、
    インポートしたいコマンドだけを選択し、セッションで名前の競合を引き起こす
    コマンドを除外することもできます。

    モジュールの作成者は、モジュールマニフェストの DefaultCommandPrefix
    プロパティを使ってすべてのコマンド名に既定のプレフィックスを追加することで、
    名前の競合を防げます。Prefix パラメーターの値は DefaultCommandPrefix の値
    より優先されます。

関連項目
    about_Command_Precedence
    about_Group_Policy_Settings
    Get-Command
    Get-Help
    Get-Module
    Import-Module
    Remove-Module
    Install-Module
    Install-PSResource

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP