기본적으로 Windows PowerShell(및 명령 프롬프트)은 현재 PowerShell 세션에서만 실행된 명령의 기록을 저장합니다. PowerShell 콘솔 창을 닫거나 컴퓨터를 다시 시작하면 입력한 PowerShell 명령 내역이 어디에도 저장되지 않습니다. bash와 비교할 때 이것은 중요한 단점입니다. PowerShell 5.0부터 시작 Windows 10(Windows Server 2016)에 도입된 PS 콘솔에 입력된 모든 명령은 이제 기본적으로 일반 텍스트 로그 파일에 저장됩니다.
PowerShell 5.0 이상의 명령 기록
복잡한 PowerShell 명령을 입력하고 실행했다고 가정합니다. Windows 10 및 Windows Server 2016에서는 컴퓨터를 다시 시작한 후에도 새 PowerShell 세션을 열고 위쪽 화살표 키를 누를 수 있습니다. 마지막으로 입력한 명령이 화면에 표시되어야 합니다. "up" 키를 계속 누르면 이전에 실행된 모든 명령이 표시됩니다. 따라서 "Up arrow
키를 사용하여 " 및 "Down arrow
" PoSh 명령의 내역을 스크롤하고 이전에 입력한 명령을 다시 실행할 수 있습니다.
up
사용 /down
키를 사용하여 현재 PS 세션의 명령 기록만 스크롤하거나 Get-History를 사용하여 전체 명령 기록을 나열할 수 있습니다. cmdlet. 명령 상태 및 시작/종료/지속 시간을 포함하여 현재 PowerShell 세션에서 이전에 실행된 명령에 대한 자세한 정보를 표시할 수 있습니다.
Get-History | Format-List -Property *
기본적으로 Windows 10의 PowerShell은 각 사용자의 프로필에 있는 일반 텍스트 파일에 저장된 마지막 4096개 명령을 저장합니다. %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
.
기록은 PowerShell 및 PowerShell ISE에 대해 별도로 저장됩니다.
PowerShell 명령을 실행하는 데 시간이 오래 걸리는 경우 완료될 때만 명령 기록에 표시됩니다.
cmd.exe에서 다음을 사용하여 현재 세션의 명령 기록을 표시할 수 있습니다.
doskey /history
F7
키는 cmd 기록을 검색하는 데 사용됩니다.
PowerShell 명령 기록을 검색하는 방법
위/아래 화살표를 사용하여 전체 PowerShell 명령 기록을 스크롤하지 않으려면 키보드 단축키 CTRL+R 을 사용하여 명령 기록을 검색할 수 있습니다. (역검색) 및 CTR +S (정방향 검색). 키 조합을 누르고 이전에 실행한 명령에서 찾고자 하는 명령의 일부를 입력하기 시작합니다. 입력한 텍스트는 명령 기록의 모든 위치에서 찾을 수 있습니다(F8
를 사용하여 PowerShell에서 검색하는 것과는 달리). 또는 Shift+F8
, 줄의 시작 부분에서만 일치 항목을 찾을 수 있음). PowerShell 콘솔은 검색 문자열에 해당하는 이전 명령을 표시해야 합니다. 라인 일치는 명령에서 강조 표시됩니다.
찾은 명령이 적합하지 않은 경우 기록을 계속 검색하려면 CTRL+R
을 누르십시오. /CTRL+S
다시. 그 결과 검색 패턴에 해당하는 다음과 같은 명령어가 화면에 나타납니다.
F8
사용 키를 누르면 현재 명령줄의 텍스트와 일치하는 명령을 기록에서 찾을 수 있습니다. 예를 들어 get-
를 입력합니다. F8
키를 누릅니다. . 이 텍스트와 일치하는 명령 기록의 마지막 항목을 찾습니다. 기록의 다음 명령으로 이동하려면 F8
키를 누르십시오. 다시.
#
를 사용할 수도 있습니다. 명령 내역을 검색할 문자입니다. 예를 들어, Get-WMI로 시작하는 마지막 명령을 찾으려면 , #get-wmi
입력 Tab
키를 누릅니다. 열쇠. 패턴과 일치하는 마지막 명령이 콘솔에 나타납니다.
명령 기록은 클래식 Windows PowerShell과 새 PowerShell Core(이미 PoSh 버전을 업그레이드한 경우)에서 동일하게 작동합니다.
Notepad.exe 창에서 이전 PoSh 명령 목록을 보려면 다음 명령을 실행하십시오.
notepad (Get-PSReadLineOption | select -ExpandProperty HistorySavePath)
쿼리와 일치하는 기록의 명령 목록을 표시하려면 다음을 사용할 수 있습니다.
Get-History | Select-String -Pattern "Get-"
PSReadLine 모듈로 PowerShell 명령 기록 관리
PowerShell 5.0의 명령 기록 기능은 Windows Management Framework 자체에 내장되어 있지 않지만 타사 PSReadLine을 기반으로 합니다. PowerShell 콘솔의 기능을 크게 확장하는 모듈입니다. PSReadLine은 콘솔에서 구문을 강조 표시하며, 마우스로 텍스트를 선택하고 CTRL+C
를 사용하여 복사/붙여넣기를 담당합니다. 및 CTRL+V
. Windows 10의 이 모듈은 C:\Program Files\WindowsPowerShell\Modules\PSReadline 에 있습니다. 폴더이며 PowerShell 콘솔이 시작될 때 자동으로 가져옵니다.
PSReadLine은 이전 버전의 Windows용 독립 실행형 PowerShell 5.0(또는 안 함) 설치 프로그램에 포함되어 있지 않습니다. 따라서 Windows Management Framework 5.1 설치 외에도 이전 Windows 버전(Windows 7/8.1 및 Windows Server 2008R2/2012R2)에서 PowerShell 명령 기록 기능을 사용하려면 PackageManagement 모듈을 통해 PSReadLine 모듈을 설치해야 합니다. (이전 OneGet) 명령을 사용하여 온라인 리포지토리에서:
Install-Module PSReadLine
PowerShell에서 명령 기록을 관리하기 위한 PSReadLine 모듈의 전체 기능 목록과 여기에 할당된 키를 다음 명령으로 표시할 수 있습니다.
Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}
Key Function Description --- -------- ----------- UpArrow PreviousHistory Replace the input with the previous item in the history DownArrow NextHistory Replace the input with the next item in the history Ctrl+r ReverseSearchHistory Search history backwards interactively Ctrl+s ForwardSearchHistory Search history forward interactively Alt+F7 ClearHistory Remove all items from the command line history (not PowerShell history) F8 HistorySearchBackward Search for the previous item in the history that starts with the current input - like NextHistory if the input is empty Shift+F8 HistorySearchForward Search for the next item in the history that starts with the current input - like NextHistory if the input is empty Unbound ViSearchHistoryBackward Starts a new seach backward in the history. Unbound BeginningOfHistory Move to the first item in the history Unbound EndOfHistory Move to the last item (the current input) in the history
Get-PSReadlineOption을 사용하여 명령 기록을 구성할 수 있습니다. 및 Set-PSReadlineOption cmdlet. 현재 PSReadline 설정은 다음 명령을 사용하여 볼 수 있습니다.
Get-PSReadlineOption | select HistoryNoDuplicates, MaximumHistoryCount, HistorySearchCursorMovesToEnd, HistorySearchCaseSensitive, HistorySavePath, HistorySaveStyle
다음 PSReadline 매개변수의 설정이 중요할 수 있습니다.
- 중복 기록 없음 – 동일한 명령을 저장해야 하는지 여부를 결정합니다.
- 최대 기록 수 – 저장된 명령의 최대 수(기본적으로 마지막 4096개의 명령이 저장됨),
- HistorySearchCursorMovesToEnd — 검색할 때 명령의 끝으로 가야 하는지 여부를 결정합니다.
- HistorySearchCaseSensitive – 검색이 대소문자를 구분하는지 여부를 결정합니다(PS 명령 기록은 기본적으로 대소문자를 구분하지 않음).
- 기록 저장 경로 – 명령이 저장된 파일의 경로를 표시합니다.
- 기록 저장 스타일 – 저장 명령의 특성을 결정합니다:
- 증분 저장 — 명령은 실행된 후 저장됩니다(기본값).
- SaveAtExit — PowerShell 콘솔이 닫힐 때 기록이 저장됩니다.
- 아무것도 저장하지 않음 — 명령 기록 저장을 비활성화합니다.
Set-PSReadlineOption을 사용하여 PSReadLine 모듈의 설정을 변경할 수 있습니다. . 예:
Set-PSReadlineOption -HistorySaveStyle SaveAtExit
로그 파일에 저장된 PowerShell 명령의 수를 늘리려면 다음 명령을 실행하십시오.
Set-PSReadlineOption -MaximumHistoryCount 10000
따라서 실행된 PowerShell 명령의 이력을 저장하는 기능은 cmd보다 PoSh 콘솔을 선호하는 인수 중 하나입니다.
PowerShell 콘솔 기록 명령을 지우는 방법
위에서 설명한 것처럼 PSReadline 모듈은 모든 PowerShell 콘솔 명령을 텍스트 파일에 저장합니다. 그러나 경우에 따라 관리자가 PowerShell 콘솔에 다양한 민감한 정보(자격 증명, 암호, 주소, 개인 데이터 등)를 입력해야 합니다. 따라서 다른 서버 관리자나 공격자가 일반 텍스트 파일의 기록 데이터에 액세스할 수 있습니다. 보안상의 이유로 실행된 PowerShell 명령의 기록을 지우거나 명령 기록을 완전히 비활성화해야 할 수도 있습니다.
명확한 기록 cmdlet은 현재 PowerShell 세션의 메모리 내 명령 기록을 지우는 데만 사용할 수 있습니다. Get-History cmdlet이 표시하는 이전 명령 목록만 지웁니다.
기록에서 이전 명령을 하나만 제거할 수 있습니다.
Clear-History -count 1 -newest
또는 특정 패턴으로 모든 명령을 지웁니다.Clear-History -CommandLine *set-ad*
이전 PowerShell 명령의 기록을 완전히 지우려면 PSReadline 모듈이 작성한 ConsoleHost_history.txt 파일을 삭제해야 합니다. 현재 PowerShell 기록 파일 위치를 가져와 다음 명령으로 제거할 수 있습니다.
Remove-Item (Get-PSReadlineOption).HistorySavePath
그런 다음 PowerShell 콘솔 창을 닫습니다.
PowerShell 명령의 기록을 텍스트 파일에 저장하는 것을 완전히 비활성화하려면 다음 명령을 실행하십시오.
Set-PSReadlineOption -HistorySaveStyle SaveNothing
PowerShell 명령 기록을 다른 세션으로 내보내거나 가져오는 방법
때로는 자주 사용하는 동일한 PowerShell 명령 집합을 다른 컴퓨터에 두는 것이 편리합니다. 컴퓨터의 현재 명령 기록을 xml 파일로 내보내고 다른 컴퓨터로 가져올 수 있습니다. 또한 ConsoleHost_history.txt 파일을 원하는 컴퓨터의 사용자 프로필에 복사하여 수행할 수도 있습니다.
현재 세션에서 파일로 명령을 내보내려면 Export-Clixml
cmdlet:
Get-History | Export-Clixml -Path c:\ps\commands_hist.xml
파일에서 다른 PoSh 세션(로컬 또는 다른 컴퓨터)으로 명령 기록을 가져오려면:
Add-History -InputObject (Import-Clixml -Path c:\ps\commands_hist.xml)
PowerShell 세션이 끝날 때 이전 명령을 파일로 자동으로 내보내려면 PoSh 세션 종료 이벤트에 스크립트를 바인딩할 수 있습니다(!! 세션은 반드시 exit
로 종료되어야 합니다. 단순히 PowerShell 창을 닫는 대신 명령):
$HistFile = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistFile } | out-null
if (Test-path $HistFile) { Import-Clixml $HistFile | Add-History }