トピック
    about_Prompts

簡易説明
    prompt 関数について説明し、カスタム prompt 関数を作成する方法を示します。

  
詳細説明
    Windows PowerShell のコマンド プロンプトは、Windows PowerShell がコマンドを実行できる状態であ
    ることを示します。

	PS C:\>


    Windows PowerShell プロンプトは、prompt 関数によって決定されます。独自の prompt 関数を作成するこ
    とによって、プロンプトをカスタマイズできます。その後、Windows PowerShell プロファイルにこの
    関数を保存できます。

   
  prompt 関数

      prompt 関数は、Windows PowerShell プロンプトの外観を決定します。Windows PowerShell 
      には組み込みの prompt 関数がありますが、独自の prompt 関数を定義してこの関数を上書きすることができます。


      prompt 関数の構文を次に示します。

	  function prompt { <function-body> }


      prompt 関数は、オブジェクト (通常は文字列) を返す必要があります。prompt 関数が文字列、または文字列
      形式のオブジェクトを返すようにすることを推奨します。文字列は、1 行あたり 80 文字以内で指定する必要があ
      ります。


      次にその例を示します。

	  PS C:\> function prompt {"Hello, World > "}
          Hello, World >

  
      すべての関数と同様に、prompt 関数は Function: ドライブに保存されます。現在の prompt 関数のコード
      を表示するには、次のように入力します。

	  (get-item function:prompt).definition


      このコマンドは、Get-Item コマンドレットを使用して、Function: ドライブの prompt 項目を表示します。
      その後、ドット表記法を使用して、prompt 関数の Definition プロパティの値を表示します。

    
  既定のプロンプト

      既定の Windows PowerShell プロンプトを次に示します。

	  PS>


      このプロンプトは、prompt 関数でエラーが発生した場合、または prompt 関数が文字列またはオブジェクトを返
      さない場合にのみ表示されます。

          PS C:\> function prompt {$null}
          PS>


      Windows PowerShell には組み込みのプロンプトがあるので、通常、独自の prompt 関数を記述するまで既定のプ
      ロンプトは表示されません。


  組み込みプロンプト
    

      Windows PowerShell には、一般的なプロンプトを作成する組み込みの prompt 関数が含まれています。
      組み込みの prompt 関数を次に示します。

          function prompt
          {
              $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 

              else { '' }) + 'PS ' + $(Get-Location) `

              + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
          }

      この関数は、Test-Path コマンドレットを使用して、$PSDebugContext 自動変数が設定されているかどうかを
      判断します。$PSDebugContext が設定されている場合、デバッグ モードになり、次のとおりプロンプトに 
      "[DBG]" が追加されます。

	  [DBG] PS C:\ps-test>
	
     
      $PSDebugContext が設定されていない場合、関数によってプロンプトに "PS" が追加されます。また、関数
      によって Get-Location コマンドレットが使用され、現在のファイル システム ディレクトリの場所が取得さ
      れます。さらに、終わり山かっこ (>) が追加されます。
      次にその例を示します。
	  
	  PS C:\ps-test>	


      入れ子になったプロンプトの場合、関数によってプロンプトに 2 つの山かっこ (>>) が追加されます 
      ($NestedPromptLevel 自動変数が 1 を超える場合、入れ子になったプロンプトになります)。


      たとえば、入れ子になったプロンプトでデバッグする場合、次のプロンプトに似たプロンプトが表示されます。

	  [DBG] PS C:\ps-test>>>


      Enter-PSSession コマンドレットは、現在の prompt 関数にリモート コンピューターの名前を追加します。
      Enter-PSSession コマンドレットを使用してリモート コンピューターとのセッションを開始すると、
      コマンド プロンプトが変更されてリモート コンピューターの名前が追加されます。次にその例を示します。

          PS Hello, World> Enter-PSSession Server01

          [Server01]: PS Hello, World>


      他の Windows PowerShell ホスト アプリケーションおよび代替シェルには、独自のカスタム コマンド プロンプ
      トが作成されている場合があります。


      $PSDebugContext および $NestedPromptLevel 自動変数の詳細については、「about_Autom
      atic_Variables」を参照してください。
 	

  プロンプトのカスタマイズ

      プロンプトをカスタマイズするには、新しい prompt 関数を記述します。関数は保護されないので、上書き可
      能です。
 

      prompt 関数を上書きするには、次のように入力します。

	  function prompt { }


      次に、中かっこの中に、コマンド、またはプロンプトを作成する文字列を入力します。


      たとえば、次のプロンプトには、コンピューター名のみが含まれます。

	  function prompt {"PS [$env:COMPUTERNAME]> "}


      Server01 コンピューターで、次のプロンプトに似たプロンプトが表示されます。

	  PS [Server01] >


      次の prompt 関数には、現在の日付と時刻が含まれます。

	  function prompt {"$(get-date)> "}


      次のプロンプトに似たプロンプトが表示されます。

	  01/01/2008 17:49:47>


      既定の prompt 関数を変更することもできます。


          function prompt
          {
              $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 

              else { '' }) + "$(get-date)" `

              + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
          }
  
      たとえば、次に示す変更された prompt 関数は、[管理者として実行] を使用して Windows PowerShell が開かれる
      と、組み込みの Windows PowerShell プロンプトに "[ADMIN]:" を追加します。
    
          function prompt 
          {
              $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
              $principal = [Security.Principal.WindowsPrincipal] $identity

              $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 

              elseif($principal.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
    	          { "[ADMIN]: " }

              else { '' }) + 'PS ' + $(Get-Location) + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
          }


      [管理者として実行] を使用して Windows PowerShell を起動すると、次のプロンプトに似たプロンプトが表示され
      ます。
                
	  [ADMIN]: PS C:\ps-test>


      次に示す prompt 関数は、次のコマンドの履歴 ID を表示します。コマンド履歴を表示するには、Get-History 
      コマンドレットを使用します。

          function prompt
          {
             # The at sign creates an array in case only one history item exists.
             $history = @(get-history)
             if($history.Count -gt 0)
             {
                $lastItem = $history[$history.Count - 1]
                $lastId = $lastItem.Id
             }

             $nextCommand = $lastId + 1
             $currentDirectory = get-location
             "PS: $nextCommand $currentDirectory >"
          }


      次のプロンプトは、Write-Host および Get-Random コマンドレットを使用して、色をランダムに変更するプ
      ロンプトを作成します。Write-Host は現在のホスト アプリケーションへの書き込みを行いますが、オブジェク
      トを返さないので、次に示す関数には return ステートメントが含まれています。return ステートメントを使用しな
      い場合、Windows PowerShell は既定のプロンプト "PS>" を使用します。

          function prompt
          {
              $color = get-random -min 1 -max 16
              write-host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color
              return " "
          }


  プロンプトの保存
	
      他の関数と同様に、prompt 関数は現在のセッションにのみ適用されます。将来のセッションのために prompt 
      関数を保存するには、この関数を Windows PowerShell プロファイルに追加します。プロファイルの詳細については、
      「about_Profiles」を参照してください。


関連項目
    Get-Location
    Enter-PSSession
    Get-History
    Get-Random
    Write-Host
    about_Profiles
    about_Functions
    about_Scopes
    about_Debuggers
    about_Automatic_Variables




目次