다음을 통해 공유


about_PSReadLine

간단한 설명

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

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

  • powerShell 7.4.2 및 7.5.0-preview.3에서 처음 제공된 v2.3.5
  • v2.3.4는 PowerShell 7.4.0-rc.1에서 처음 배송되었습니다.
  • powerShell 7.3.0에서 처음 제공된 v2.2.6
  • v2.1.0이 PowerShell 7.2.5에서 처음 배송됨
  • powerShell 7.0.11에서 처음 제공된 v2.0.4
  • Windows PowerShell 5.1에서 v2.0.0이 배송됩니다.

버전 차이에 대한 자세한 내용은 about_PSReadLine_Release_Notes 참조하세요.

긴 설명

현재 버전의 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 매개 변수는 도메인별 및 사용자 지정 요구 사항에 대한 플러그 인을 수락할 수도 있습니다.

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

Set-PSReadLineOption -PredictionSource None

사용자 지정 키 바인딩

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에 대한 피드백 및 기여

GitHub의 PSReadLine

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

참고 항목

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