PowerShell HelpFile - about_prompts
 記事記号:[me1558] 初版:2011/May/10

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

トピック
    about_Prompts

簡易説明
    prompt 関数について説明し、カスタム prompt 関数を作成する方法を示します。
  
詳細説明
    Windows PowerShell のコマンド プロンプトは、Windows PowerShell がコマンドを
    実行できる状態であることを示します。

	PS C:\>

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

      prompt 関数は、Windows PowerShell プロンプトの外観を決定します。Windows Po
      werShell には組み込みの 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: ドライブの pr
      ompt 項目を表示します。その後、ドット表記法を使用して、prompt 関数の Defin
      ition プロパティの値を表示します。
    
  既定のプロンプト

      既定の 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 自動変数の詳細については、「abou
      t_Automatic_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 -foregroundc
                  olor $color
              return " "
          }

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

関連項目
    Get-Location
    Enter-PSSession
    Get-History
    Get-Random
    Write-Host
    about_Profiles
    about_Functions
    about_Scopes
    about_Debuggers
    about_Automatic_Variables
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_prompts
ご利用数: 1917554
感想・要望・問い合わせは こちら