다음을 통해 공유


about_Prompts

간단한 설명

함수를 Prompt 설명하고 사용자 지정 Prompt 함수를 만드는 방법을 보여 줍니다.

자세한 설명

PowerShell 명령 프롬프트는 PowerShell이 명령을 실행할 준비가 되었음을 나타냅니다.

PS C:\>

PowerShell에는 기본 제공 함수가 있습니다 Prompt . PowerShell 프로필 스크립트에서 사용자 지정 함수를 Prompt 정의할 수 있습니다.

프롬프트 함수 정보

함수는 Prompt PowerShell 프롬프트의 모양을 결정합니다. PowerShell에는 기본 제공 Prompt 함수가 제공되지만 고유한 Prompt 함수를 정의하여 재정의할 수 있습니다.

함수 Prompt 에는 다음과 같은 구문이 사용됩니다.

function Prompt { <function-body> }

함수는 Prompt 개체를 반환해야 합니다. 문자열 또는 문자열 형식이 지정된 개체를 반환하는 것이 가장 좋습니다. 최대 권장 길이는 80자입니다.

예를 들어 다음 함수는 Prompt "Hello, World" 문자열과 오른쪽 꺾쇠괄호(>)를 반환합니다.

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

프롬프트 함수 가져오기

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

예시:

PS C:\> Get-Command Prompt

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

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

예시:

(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 오류를 생성하거나 개체를 반환하지 않는 경우에만 나타납니다.

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

PS>

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

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

PowerShell에는 기본 제공 프롬프트가 함께 제공되므로 일반적으로 기본 프롬프트가 표시되지 않습니다.

기본 제공 프롬프트

PowerShell에는 기본 제공 함수가 포함되어 있습니다 Prompt .

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

함수는 cmdlet을 Test-Path 사용하여 자동 변수에 값이 $PSDebugContext 있는지 여부를 테스트합니다. 값이 있는 경우 $PSDebugContext 디버깅 모드에서 실행 중이며 [DBG]: 다음과 같이 프롬프트에 추가됩니다.

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

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

예시:

PS C:\ps-test>

중첩 프롬프트에 있는 경우 함수는 프롬프트에 두 개의 꺾쇠 괄호(>>)를 추가합니다. 자동 변수의 값이 0보다 큰 경우 중첩 프롬프트에 $NestedPromptLevel 있습니다.

예를 들어 중첩된 프롬프트에서 디버깅하는 경우 프롬프트는 다음 프롬프트와 유사합니다.

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

프롬프트 변경 내용

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

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

다른 PowerShell 호스트 애플리케이션 및 대체 셸에는 고유한 사용자 지정 명령 프롬프트가 있을 수 있습니다.

자동 변수 및 $NestedPromptLevel 자동 변수에 $PSDebugContext 대한 자세한 내용은 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 함수는 관리자 권한 세션에서 실행할 때 기본 제공 PowerShell 프롬프트에 추가 [ADMIN]: 됩니다.

function prompt {
  $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
  $principal = [Security.Principal.WindowsPrincipal] $identity
  $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

  $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
    elseif($principal.IsInRole($adminRole)) { "[ADMIN]: " }
    else { '' }
  ) + 'PS ' + $(Get-Location) +
    $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
}

관리자 권한으로 실행 옵션을 사용하여 PowerShell을 시작하면 다음 프롬프트와 유사한 프롬프트가 나타납니다.

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

다음 Prompt 함수는 다음 명령의 기록 ID를 표시합니다. 명령 기록을 보려면 cmdlet을 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 >"
}

다음 프롬프트는 및 Get-Random cmdlet을 사용하여 Write-Host 색을 임의로 변경하는 프롬프트를 만듭니다. Write-Host 현재 호스트 애플리케이션에 쓰지만 개체를 반환하지 않으므로 이 함수에는 문이 포함됩니다Return. 이 프롬프트가 없으면 PowerShell은 기본 프롬프트 PS>를 사용합니다.

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

프롬프트 함수 저장

다른 함수와 마찬가지로 함수는 Prompt 현재 세션에만 존재합니다. 이후 세션에 Prompt 대한 함수를 저장하려면 PowerShell 프로필에 추가합니다. 프로필에 대한 자세한 내용은 about_Profiles 참조하세요.

참고 항목