PowerShell HelpFile - about_command_precedence
 記事記号:[me1518] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    about_Command_Precedence

簡易説明
    Windows PowerShell で実行するコマンドがどのように決定されるかについて説明し
    ます。

詳細説明

    このトピックでは、特に 1 つのセッションに同じ名前の複数のコマンドが存在する
    場合に、Windows PowerShell で実行するコマンドがどのように決定されるかについ
    て説明します。また、既定では実行されないコマンドを実行する方法と、セッション
    内でコマンド名の競合を回避する方法についても説明します。

  コマンドの優先順位
      1 つのセッションに同じ名前のコマンドが存在する場合、Windows PowerShell で
      は、次の規則に従って実行するコマンドが決定されます。

      これらの規則は、モジュール、スナップイン、およびその他のセッションから現在
      のセッションにコマンドを追加した場合に非常に重要になります。
    
      -- コマンドにパスを指定した場合、Windows PowerShell はパスで指定した場所に
         あるコマンドを実行します。

         たとえば、次のコマンドは C:\TechDocs ディレクトリにある FindDocs.ps1 ス
         クリプトを実行します。

             C:\TechDocs\FindDocs.ps1

         セキュリティ機能として、Windows PowerShell では、Path 環境変数 ($env:pa
         th) に含まれているパスにあるコマンドか、スクリプト ファイルのパスを指定
         しない限り、Windows PowerShell スクリプトなどの実行可能コマンド (ネイテ
         ィブ コマンド) は実行されません。

         現在のディレクトリにあるスクリプトを実行するには、完全なパスを指定する
         か、または現在のディレクトリを表すピリオド (.) を入力します。

         たとえば、現在のディレクトリ内の FindDocs.ps1 ファイルを実行するには、
         次のように入力します。

             .\FindDocs.ps1

      -- パスを指定しなかった場合、Windows PowerShell は次の優先順位でコマンドを
         実行します。

              1. エイリアス
              2. 関数
              3. コマンドレット
              4. ネイティブ Windows コマンド

          したがって、「help」と入力した場合、Windows PowerShell はまず "help" 
          という名前のエイリアスを探し、次に "Help" という名前の関数、そして "He
          lp" という名前のコマンドレットを探します。最初に見つかった "help" 項目
          が実行されます。

          たとえば、Get-Map という名前の関数があるとします。ここで、Get-Map とい
          う名前のコマンドレットを追加またはインポートします。「Get-Map」と入力
          すると、既定では関数が Windows PowerShell によって実行されます。        

      -- 同じ名前を持つ同じ種類の項目がセッションに存在する場合、たとえば 2 つの
         コマンドレットに同じ名前が付いている場合は、一番最後にセッションに追加
         された項目が実行されます。

         たとえば、Get-Date という名前のコマンドレットがあるとします。ここで、Ge
         t-Date という名前のコマンドレットをもう 1 つインポートします。「Get-Dat
         e」と入力すると、既定では、最後にインポートされたコマンドレットが Windo
         ws PowerShell によって実行されます。

  隠し項目および置換された項目
      これらの規則の結果として、項目が同じ名前の項目で置き換わったり、隠れた状態
      になる場合があります。

      --  このような場合に、たとえばモジュールまたはスナップイン名で項目名を修飾
          することによって元の項目にアクセスできるのであれば、その項目は "隠れて
          いる" 状態になっています。

          たとえば、セッションに存在するコマンドレットと同じ名前の関数をインポー
          トした場合、コマンドレットは隠れた状態になります (ただし、置換されたわ
          けではありません)。これは、コマンドレットがスナップインまたはモジュー
          ルからインポートされているためです。
            
      --  元の項目にアクセスできない場合は、項目は "置換" または "上書き" された
          状態です。

          たとえば、セッションに存在する変数と同じ名前の変数をインポートした場合、
          元の変数は置換され、アクセスできなくなります。変数はモジュール名で修飾
          できません。
           
          また、コマンド ラインに関数を入力してから、同じ名前の関数をインポート
          した場合、元の関数は置換されてアクセスできなくなります。

  隠れているコマンドの実行
      特定のコマンドを実行するには、そのコマンドと同じ名前を持っている可能性のあ
      る他のコマンドと区別するための項目プロパティを指定します。

      この方法は任意のコマンドの実行に使用できますが、隠れているコマンドの実行に
      は特に便利です。

      この方法は、記述したスクリプトを配布する予定がある場合に、ベスト プラクテ
      ィスとして使用することをお勧めします。そのスクリプトが実行されるセッション
      内にどんなコマンドが存在するか、予測できないためです。

      修飾名
      Windows PowerShell スナップインやモジュール、または別のセッションからイン
      ポートしたコマンドは、インポート元のモジュール名やスナップイン名でコマンド
      名を修飾することで実行できます。

      コマンドは修飾できますが、変数やエイリアスは修飾できません。

      たとえば、Microsoft.PowerShell.Utility スナップインの Get-Date コマンドレ
      ットが、同じ名前のエイリアス、関数、またはコマンドレットによって隠されてい
      る場合は、スナップインで修飾したコマンドレット名を使用することで、このコマ
      ンドレットを実行できます。

          Microsoft.PowerShell.Utility\Get-Date

      MapFunctions モジュールによって追加された New-Map コマンドを実行するには、
      モジュール名で修飾した名前を使用します。

          MapFunctions\New-Map

      コマンドのインポート元のスナップインまたはモジュールを検索するには、次の G
      et-Command コマンド形式を使用します。

          get-command  | format-list -property Name, PSSnapin, Mod
          ule

      たとえば、Get-Date コマンドレットのソースを検索するには、次のように入力し
      ます。

          get-command get-date | format-list -property Name, PSSnapin, Module

          Name     : Get-Date
          PSSnapIn : Microsoft.PowerShell.Utility
          Module   :
       
      呼び出し演算子
      呼び出し演算子 (&) を使用すると、Get-ChildItem (エイリアスは "dir")、Get-C
      ommand、または Get-Module コマンドを使用して取得できる任意のコマンドを実行
      できます。

      コマンドを実行するには、Get-Command コマンドをかっこで囲み、呼び出し演算子 
      (&) を使用します。

          &(get-command ...)  

      - または -

          &(dir ...)

      たとえば、Map という名前のエイリアスによって隠されている Map という名前の
      関数がある場合、その関数を実行するには、次のコマンドを使用します。

          &(get-command -name map -type function)  

      - または -

          &(dir function:\map)

      隠れているコマンドの実行を容易にするために、コマンドを変数に保存することも
      できます。

      たとえば、次のコマンドでは、Map 関数を $myMap 変数に保存してから、呼び出し
      演算子を使用して実行します。

          $myMap = (get-command -name map -type function)

          &($myMap)

      インポート元がモジュールであるコマンドの場合は、次の形式を使用して実行でき
      ます。

         &  

      たとえば、FileCommands モジュールの Add-File コマンドレットを実行するには、
      次のコマンド シーケンスを使用します。
           
         $FileCommands = get-module -name FileCommands
           
         & $FileCommands Add-File
        
  置換された項目
      セッションで作成するかプロファイルを使用して追加した関数、変数、エイリアス
      など、モジュールまたはスナップインからインポートしたのではない項目は、同じ
      名前のコマンドで置換されることがあります。これらの項目は置換されると、アク
      セスできなくなります。

      変数およびエイリアスは、呼び出し演算子や修飾名を使用して実行できないため、
      モジュールまたはスナップインからインポートされた場合でも常に置換されます。

      たとえば、現在のセッションで Get-Map 関数を入力した後、Get-Map という名前
      の関数をインポートすると、元の関数が置換されます。現在のセッションで元の関
      数を取得することはできません。
   
  名前の競合の回避
      コマンド名の競合を管理する最善の方法は、競合を防止することです。コマンドに
      は、固有度の高い名前または一意である可能性の高い名前を使用してください。た
      とえば、コマンド内の名詞に自分のイニシャルや会社名の頭字語を追加します。

      また、Windows PowerShell モジュールや別のセッションから現在のセッションに
      コマンドをインポートする場合は、Import-Module コマンドレットまたは Import-
      PSSession コマンドレットの Prefix パラメーターを使用して、コマンド名の名詞
      にプレフィックスを追加します。

      たとえば、DateFunctions モジュールをインポートする場合、次のコマンドを使用
      して、Windows PowerShell に含まれる Get-Date コマンドレットと Set-Date コマ
      ンドレットとの競合を回避します。

          import-module -name DateFunctions -prefix ZZ

      詳細については、「Import-Module」および「Import-PSSession」を参照してくださ
      い。

関連項目
    about_Path_Syntax
    about_Aliases
    about_Functions
    Alias (プロバイダー)
    Function (プロバイダー)
    Get-Command
    Import-Module
    Import-PSSession
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_command_precedence
ご利用数: 1858265
感想・要望・問い合わせは こちら