about_Prompts

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

항목

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 함수는 개체를 반환해야 합니다. 문자열 또는 문자열로 형식이 지정된 개체를 반환하는 것이 좋습니다. 최대 권장 길이는 80자입니다.

예를 들어 다음 prompt 함수는 "Hello, World" 문자열을 반환하고 그 뒤에 캐럿(>)이 표시됩니다.

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

PROMPT 함수 가져오기

Prompt 함수를 가져오려면 Get-Command cmdlet을 사용하거나 Function 드라이브에서 Get-Item cmdlet을 사용합니다.

함수는 명령입니다. 따라서 Get-Command cmdlet을 사용하여 Prompt 함수를 포함한 함수를 가져올 수 있습니다.

예를 들면 다음과 같습니다.

        PS C:\>Get-Command Prompt

        CommandType     Name                                               ModuleName
        -----------     ----                                               ----------
        Function        prompt
        

프롬프트 값을 설정하는 스크립트를 가져오려면 dot 메서드를 사용하여 Prompt 함수의 ScriptBlock 속성을 가져옵니다.

예를 들면 다음과 같습니다.

        PS C:\>(Get-Command Prompt).ScriptBlock

        "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
        # .Link
        # https://go.microsoft.com/fwlink/?LinkID=225750
        # .ExternalHelp System.Management.Automation.dll-help.xml

모든 함수처럼 Prompt 함수는 Function: 드라이브에 저장됩니다. 현재 Prompt 함수를 만드는 스크립트를 표시하려면 다음을 입력합니다.

        (Get-Item function:prompt).ScriptBlock

기본 프롬프트

기본 프롬프트는 Prompt 함수가 오류를 생성하거나 개체를 반환하지 않을 때만 나타납니다.

기본 Windows PowerShell 프롬프트는 다음과 같습니다.

        PS>

예를 들어 다음 명령은 Prompt 함수를 유효하지 않은 $null로 설정합니다. 따라서 기본 프롬프트가 나타납니다.

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

Windows PowerShell에는 기본 제공 프롬프트가 함께 제공되므로 보통 기본 프롬프트가 표시되지 않습니다.

기본 제공 프롬프트

Windows PowerShell에는 기본 제공 prompt 함수가 있습니다.

Windows PowerShell 3.0의 기본 제공 prompt 함수는 다음과 같습니다.

        function prompt
        {
            "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
        }

이 간소화된 프롬프트는 "PS"로 시작하고, 그 뒤에 현재 위치가 추가되고 중첩 프롬프트 수준별로 하나씩 ">"이 추가됩니다.

Windows PowerShell 2.0의 기본 제공 prompt 함수는 다음과 같습니다.

        function prompt
        {
            $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 
            else { '' }) + 'PS ' + $(Get-Location) `
            + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
        } 

이 함수는 Test-Path cmdlet을 사용하여 $PSDebugContext 자동 변수가 채워지는지 결정합니다. $PSDebugContext가 채워지면 디버깅 모드에 있는 것이고 "[DBG]"가 다음과 같이 프롬프트에 추가됩니다.

        [DBG] PS C:\ps-test>

$PSDebugContext가 채워지지 않으면 이 함수는 프롬프트에 "PS"를 추가합니다. 또한 이 함수는 Get-Location cmdlet을 사용하여 현재 파일 시스템 디렉터리 위치를 가져옵니다. 그다음에 닫는 꺾쇠 괄호(>)를 추가합니다.

    For example:        
        PS C:\ps-test>

중첩 프롬프트에 있으면 이 함수는 꺽쇠 괄호 두 개(>>)를 프롬프트에 추가합니다. $NestedPromptLevel 자동 변수 값이 1보다 크면 중첩 프롬프트에 있는 것입니다.

예를 들어 중첩 프롬프트에서 디버깅 중이면 프롬프트가 다음과 같이 표시됩니다.

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

프롬프트 변경

Enter-PSSession cmdlet은 원격 컴퓨터 이름을 현재 Prompt 함수 앞에 추가합니다. Enter-PSSession cmdlet을 사용하여 원격 컴퓨터에서 세션을 시작하면 명령 프롬프트는 원격 컴퓨터의 이름을 포함하도록 변경됩니다. 예를 들면 다음과 같습니다.

          PS Hello, World> Enter-PSSession Server01
          [Server01]: PS Hello, World>

기타 Windows PowerShell 호스트 응용 프로그램 및 대체 셸에는 고유한 사용자 지정 명령 프롬프트가 있습니다.

$PSDebugContext 및 $NestedPromptLevel 자동 변수에 대한 자세한 내용은 about_Automatic_Variables를 참조하세요.

프롬프트를 사용자 지정하는 방법

프롬프트를 사용자 지정하려면 새 Prompt 함수를 작성합니다. 이 함수는 보호되지 않으므로 함수를 덮어쓸 수 있습니다.

prompt 함수를 작성하려면 다음을 입력합니다.

        function prompt { }

그다음에 중괄호 사이에 명령을 입력하거나 프롬프트를 만드는 문자열을 입력합니다.

예를 들어 다음 프롬프트에는 컴퓨터 이름이 포함됩니다.

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

Server01 컴퓨터에서 프롬프트가 다음과 같이 표시됩니다.

        PS [Server01] >

다음 prompt 함수에는 현재 날짜와 시간이 포함됩니다.

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

프롬프트가 다음과 같이 표시됩니다.

        03/15/2012 17:49:47>

기본 Prompt 함수를 변경할 수도 있습니다.

예를 들어 다음 수정된 Prompt 함수는 "관리자 권한으로 실행" 옵션을 사용하여 Windows PowerShell을 열 때 "[ADMIN]:"을 기본 제공 Windows PowerShell 프롬프트에 추가합니다.

        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 cmdlet을 사용합니다.

          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 cmdlet을 사용하여 색을 임의로 변경하는 프롬프트를 만듭니다. Write-Host는 현재 호스트 응용 프로그램에 기록되지만 개체를 반환하지 않으므로 이 함수에는 Return 문이 포함됩니다. 이 문이 없으면 Windows PowerShell은 기본 프롬프트인 "PS>"를 사용합니다.

        function prompt
        {
            $color = Get-Random -Min 1 -Max 16
            Write-Host ("PS " + $(Get-Location) +">") -NoNewLine -ForegroundColor $Color
            return " "
        }

PROMPT 함수 저장

모든 함수처럼 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