about_PSReadLine

간단한 설명

PSReadLine은 PowerShell 콘솔에서 향상된 명령줄 편집 환경을 제공합니다.

긴 설명

PowerShell 7.4는 PSReadLine 2.3.4와 함께 제공합니다. 현재 버전은 PSReadLine 2.3.4입니다. 현재 버전의 PSReadLine은 Windows PowerShell 5.1 이상에서 설치 및 사용할 수 있습니다. 일부 기능의 경우 PowerShell 7.2 이상을 실행해야 합니다.

PSReadLine은 PowerShell 콘솔에 대한 강력한 명령줄 편집 환경을 제공합니다. 이 콘솔은 다음과 같은 기능을 제공합니다.

  • 명령줄의 구문 색 지정
  • 구문 오류의 시각적 표시
  • 더 나은 여러 줄 환경(편집 및 기록 모두)
  • 사용자 지정 가능한 키 바인딩
  • Cmd 및 Emacs 모드
  • 여러 구성 옵션
  • Bash 스타일 완성(Cmd 모드에서는 선택 사항, Emacs 모드에서는 기본값)
  • 에맥스 양크/킬 링
  • PowerShell 토큰 기반 "단어" 이동 및 삭제
  • 예측 IntelliSense
  • 명령줄에서 위치를 잃지 않고 콘솔에서 도움말의 동적 표시

PSReadLine에는 PowerShell 5.1 이상이 필요합니다. PSReadLine은 기본 Windows 콘솔 호스트, Windows 터미널 및 Visual Studio Code에서 작동합니다. Windows PowerShell ISE에서는 작동하지 않습니다.

PSReadLine은 PowerShell 갤러리 설치할 수 있습니다. 지원되는 PowerShell 버전에서 PSReadLine을 설치하려면 다음 명령을 실행합니다.

Install-Module -Name PSReadLine -AllowClobber -Force

참고 항목

PowerShell 7.0부터 PowerShell은 화면 판독기 프로그램이 검색된 경우 Windows에서 PSReadLine 자동 로드를 건너뜁니다. 현재 PSReadLine은 화면 읽기 프로그램에서 잘 작동하지 않습니다. Windows에서 PowerShell 7.0의 기본 렌더링 및 서식이 제대로 작동합니다. 필요한 경우 모듈을 수동으로 로드할 수 있습니다.

예측 IntelliSense

예측 IntelliSense는 사용자가 명령을 성공적으로 완료하는 데 도움이 되는 탭 완성 개념에 추가되었습니다. 이를 통해 사용자는 사용자의 기록에서 일치하는 예측 및 추가 작업기본 특정 플러그 인에 따라 전체 명령을 검색, 편집 및 실행할 수 있습니다.

예측 IntelliSense 사용

예측 IntelliSense는 기본적으로 사용하지 않도록 설정됩니다. 예측을 사용하도록 설정하려면 다음 명령을 실행하기만 하면 됩니다.

Set-PSReadLineOption -PredictionSource History

PredictionSource 매개 변수는 do기본 특정 및 사용자 지정 요구 사항에 대한 플러그 인을 수락할 수도 있습니다.

예측 IntelliSense를 사용하지 않도록 설정하려면 다음을 실행하기만 하면 됩니다.

Set-PSReadLineOption -PredictionSource None

참고 항목

예측 IntelliSense는 PSReadLine 2.2.6에서 기본적으로 사용하도록 설정됩니다. 자세한 내용은 아래 노트 섹션의 PSReadLine 릴리스 기록을참조하세요.

사용자 지정 키 바인딩

PSReadLine은 cmdlet을 사용하여 사용자 지정 키 바인딩을 Set-PSReadLineKeyHandler 지원합니다. 대부분의 사용자 지정 키 바인딩은 바인딩 가능한 함수 중 하나를 호출합니다( 예:

Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward

ScriptBlock을 키에 바인딩할 수 있습니다. ScriptBlock은 원하는 모든 작업을 수행할 수 있습니다. 몇 가지 유용한 예는 다음과 같습니다.

  • 명령줄 편집
  • 새 창 열기(예: 도움말)
  • 명령줄을 변경하지 않고 디렉터리 변경

ScriptBlock은 두 개의 인수를 받습니다.

  • $key- 사용자 지정 바인딩을 트리거한 키인 [ConsoleKeyInfo] 개체입니다. 동일한 ScriptBlock을 여러 키에 바인딩하고 키에 따라 다른 작업을 수행해야 하는 경우 검사 $key수 있습니다. 많은 사용자 지정 바인딩은 이 인수를 무시합니다.

  • $arg - 임의의 인수입니다. 대부분의 경우 이 인수는 사용자가 키 바인딩 DigitArgument에서 전달하는 정수 인수입니다. 바인딩에서 인수를 허용하지 않는 경우 이 인수를 무시하는 것이 합리적입니다.

실행하지 않고 기록에 명령줄을 추가하는 예제를 살펴보겠습니다. 이 기능은 작업을 수행하는 것을 잊어버렸지만 이미 입력한 명령줄을 다시 입력하지 않으려는 경우에 유용합니다.

$parameters = @{
    Key = 'Alt+w'
    BriefDescription = 'SaveInHistory'
    LongDescription = 'Save current line in history but do not execute'
    ScriptBlock = {
      param($key, $arg)   # The arguments are ignored in this example

      # GetBufferState gives us the command line (with the cursor position)
      $line = $null
      $cursor = $null
      [Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line,
        [ref]$cursor)

      # AddToHistory saves the line in history, but does not execute it.
      [Microsoft.PowerShell.PSConsoleReadLine]::AddToHistory($line)

      # RevertLine is like pressing Escape.
      [Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
  }
}
Set-PSReadLineKeyHandler @parameters

PSReadLine 모듈 폴더에 설치된 파일SamplePSReadLineProfile.ps1에서 더 많은 예제를 볼 수 있습니다.

대부분의 키 바인딩은 명령줄을 편집하기 위해 몇 가지 도우미 함수를 사용합니다. 이러한 API는 about_PSReadLine_Functions 문서화되어 있습니다.

주의

명령 기록

PSReadLine은 기본 명령줄에서 입력한 모든 명령과 데이터를 포함하는 기록 파일을 포함합니다. 기록 파일은 이름이 인 파일입니다 $($host.Name)_history.txt. Windows 시스템에서 기록 파일은 .에 $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine저장됩니다. 비 Windows 시스템에서 기록 파일은 또는 에 $env:XDG_DATA_HOME/powershell/PSReadLine$env:HOME/.local/share/powershell/PSReadLine저장됩니다.

기록에는 암호를 포함한 중요한 데이터가 포함될 수 있습니다. PSReadLine은 중요한 정보를 필터링하려고 시도합니다. 다음 문자열을 포함하는 명령줄은 기록 파일에 기록되지 않습니다.

  • password
  • asplaintext
  • token
  • apikey
  • secret

PSReadLine 2.2.0은 중요한 데이터의 필터링을 개선합니다.

  • 구문 분석된 명령줄의 PowerShell AST(추상 구문 트리)를 사용하여 중요한 데이터를 찾습니다.
  • SecretManagement 모듈에서 안전한 cmdlet의 허용 목록을 사용하여 해당 명령을 기록에 추가할 수 있도록 합니다. 허용 목록에는 다음이 포함됩니다.
    • Get-Secret
    • Get-SecretInfo
    • Get-SecretVault
    • Register-SecretVault
    • Remove-Secret
    • Set-SecretInfo
    • Set-SecretVaultDefault
    • Test-SecretVault
    • Unlock-SecretVault
    • Unregister-SecretVault

예를 들어 다음 명령을 기록 파일에 쓸 수 있습니다.

Get-Secret PSGalleryApiKey -AsPlainText # Get-Secret is in the allowlist
$token = Get-Secret -Name github-token -Vault MySecret
[MyType]::CallRestAPI($token, $url, $args)
$template -f $token

다음 명령은 기록 파일에 기록되지 않습니다.

$token = 'abcd' # Assign expr-value to sensitive variable name.
Set-Secret abc $mySecret # Set-Secret is not in the allowlist.
ConvertTo-SecureString stringValue -AsPlainText # '-AsPlainText' is an alert.
Invoke-WebRequest -Token xxx # Expr-value as argument to '-Token'.
Get-ResultFromTwo -Secret1 (Get-Secret -Name blah -AsPlainText) -Secret2 sdv87ysdfayf798hfasd8f7ha # '-Secret2' has expr-value argument.

기록 파일에 기록하지 않으려는 다른 명령이 있는 경우 cmdlet의 AddToHistoryHandler 매개 변수를 Set-PSReadLineOption 사용할 수 있습니다. AddToHistoryHandler를 사용하는 방법에 대한 예제는 Set-PSReadLineOption예제 7을 참조하세요.

PSReadLine 2.3.4는 중요한 데이터의 필터링을 개선합니다.

기록에 안전한 속성 액세스를 포함할 수 있도록 기본 중요한 기록 스크러빙이 향상되었습니다.

중요한 문자열이 속성 액세스의 일부인 경우:

  • 이 멤버 액세스 작업이 할당의 일부가 아닌 경우 안전한 것으로 간주합니다.
  • 그렇지 않으면 오른쪽이 파이프라인 또는 변수인 경우 안전한 것으로 간주합니다.

예를 들어 다음 사용 사례는 안전한 것으로 간주되어 기록에 저장할 수 있습니다.

$a.Secret = Get-Secret -Name github-token -Vault MySecret
$a.Secret = $secret
$a.Password.Secret | Set-Value
$token = (Get-AzAccessToken -ResourceUrl 'https://app.contoso.com').Token

또한 이 릴리스는 중요한 기록 스크러빙을 개선하여 , gcloud및 명령줄 도구를 사용하여 az토큰을 검색할 수 있도록 했습니다kubectl.

예를 들어 다음 사용 사례는 안전한 것으로 간주되어 기록에 저장할 수 있습니다.

kubectl get secrets
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
kubectl describe secret db-user-pass
az account get-access-token --resource=https://app.contoso.com --query accessToken --output tsv
$env:PGPASS = gcloud auth print-access-token

PSReadLine 릴리스 기록

Windows PowerShell 5.1에서 제공되는 버전 이후 PSReadLine에 대한 많은 업데이트가 있었습니다.

  • 현재 릴리스는 PSReadLine 2.3.4입니다.
  • PowerShell 7.4는 PSReadLine 2.3.4와 함께 제공합니다.
  • PowerShell 7.3은 PSReadLine 2.2.6과 함께 제공합니다.
  • PowerShell 7.2는 PSReadLine 2.1.0과 함께 제공합니다.
  • PSReadLine 2.0.4와 함께 제공되는 PowerShell 7.0.11
  • PowerShell 5.1은 PSReadLine 2.0.0과 함께 제공합니다.

전체 변경 내용은 PSReadLine ChangeLog를 참조하세요.

  • PSReadLine 2.3.4

이 릴리스에는 몇 가지 버그 수정 외에도 다음과 같은 향상된 기능이 포함되어 있습니다.

  • 예측 IntelliSense에 대한 스크롤 가능한 ListView

    • 터미널 창의 크기에 따라 크기를 자동 조정합니다.
    • 최대 50개의 예측 결과를 포함할 수 있습니다.
    • 결과 수와 현재 예측 원본을 보여 주는 동적 목록 헤더
  • 에서 토큰azgcloud을 검색할 수 있도록 중요한 기록 스크러빙 개선kubectl

  • 안전한 속성 액세스를 허용하도록 기본 중요한 기록 스크러빙 개선

  • 단어 연결, 중단 및 대문자 변환에 대한 지원 추가

  • 탭 완성에서 대/소문자 ListItemText 별로만 다른 결과를 표시합니다.

  • VI 편집 모드에서 텍스트 개체 명령을 <d,i,w> 지원합니다.

  • 인라인 예측의 기본 색을 흐리게 변경

  • 다음을 통해 유니코드 코드 포인트를 유니코드 문자로 변환하기 위한 샘플을 추가합니다. Alt+x

  • Windows에서 TerminateOrphanedConsoleApps 옵션을 추가하여 콘솔 입력에서 읽기를 엉망으로 만들 수 있는 분리된 콘솔 연결 프로세스를 종료합니다.

  • PSReadLine 2.2.6

    이 릴리스에서 예측 IntelliSense 기능은 다음 조건에 따라 기본적으로 사용하도록 설정됩니다.

    • VT(가상 터미널)가 지원되고 PSReadLine이 PowerShell 7.2 이상 에서 실행되는 경우 PredictionSource 는 로 설정됩니다. HistoryAndPlugin
    • VT가 지원되고 PSReadLine이 7.2 이전의 PowerShell에서 실행되는 경우 PredictionSource 는 로 설정됩니다. History
    • VT가 지원 되지 않는 경우 PredictionSource 는 로 설정됩니다. None
  • PSReadLine 2.2.5

    사소한 버그 수정이 포함된 공식 서비스 릴리스입니다.

  • PSReadLine 2.2.2

    • PSReadLine에는 두 가지 새로운 예측 IntelliSense 기능이 추가되었습니다.
      • ListView항목을 선택할 수 있도록 PredictionViewStyle 매개 변수가 추가되었습니다.
      • PSReadLine을 CommandPrediction 커넥트 사용자가 사용자 지정 원본에서 제안을 렌더링할 수 있는 예측 모듈을 가져올 수 있도록 PowerShell 7.2에 도입된 API입니다.
    • 동적 도움말에 1.0.0 버전을 Microsoft.PowerShell.Pager 사용하도록 업데이트됨
    • 중요한 기록 항목의 스크러빙 개선
    • 많은 버그 수정 및 더 작은 개선 사항
  • PSReadLine 2.1.0

    이 릴리스는 2.0.4 릴리스 이후 추가된 다음과 같은 향상된 기능을 롤업합니다.

    • 명령 기록에서 예측 IntelliSense 제안 추가
    • 많은 버그 수정 및 API 향상
  • PSReadLine 2.0.4

    이 릴리스는 2.0.0 릴리스 이후 추가된 다음과 같은 향상된 기능을 롤업합니다.

    • -Chord 특정 키 바인딩 검색을 Get-PSReadLineKeyHandler 허용하는 매개 변수가 추가됨

PSReadLine에 대한 피드백 및 기여

GitHub의 PSReadLine

자유롭게 끌어오기 요청을 제출하거나 GitHub 페이지에서 피드백을 제출하세요.

참고 항목

  • PSReadLine은 GNU 읽기 라인 라이브러리의 영향을 크게 받습니다.