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은 GNU 읽기 라인 라이브러리의 영향을 크게 받습니다.
PowerShell