Windows 10에서 PowerShell 명령 기록을 가져오는 방법

윈도우 10의 PowerShell은 현재 세션에서 실행된 명령어들을 기록하는 기능을 제공하지만, 많은 사용자들에게는 이 기능만으로는 충분하지 않을 수 있습니다. 세션 간의 명령어 기록이 필요한 경우가 있습니다. 이러한 필요를 충족시키기 위해, 현재 세션 기록뿐만 아니라 전체 PowerShell 명령어 기록을 얻는 데 도움이 될 수 있는 방법과 스크립트, 그리고 로그 파일에 대해 알아보겠습니다.

현재 세션 명령어 기록 확인

PowerShell 5 이상 버전을 사용하고 있다면, 다음 명령어를 통해 현재 세션의 명령어 기록을 확인할 수 있습니다.

Get-History

기본적으로 PowerShell은 최대 50개의 명령어를 저장하도록 설정되어 있지만, 이 설정을 변경하여 더 많은 명령어를 저장할 수 있습니다. PowerShell 창의 제목 표시줄을 마우스 오른쪽 버튼으로 클릭하고 ‘속성’ 메뉴를 선택합니다. 속성 창의 ‘옵션’ 탭에서 ‘명령 기록’ 섹션을 찾을 수 있습니다. 여기에서 저장되는 명령어 수를 조정할 수 있습니다.

PowerShell 기록 로그 활용

PowerShell 명령어의 실행 기록을 로그 파일로 확인하려면, 먼저 PSReadLine 모듈을 설치해야 합니다. 다음 명령어를 사용하여 모듈을 설치합니다.

Install-Module PSReadLine

모듈 설치 후, 다음 명령어를 실행하면 기록 로그 파일의 위치를 확인할 수 있습니다. 이 파일에는 PowerShell에서 실행된 모든 명령어의 전체 기록이 저장됩니다.

(Get-PSReadlineOption).HistorySavePath

세션 간 명령어 기록 유지

세션 간에도 명령어 기록을 유지하는 방법은 조금 복잡하지만, 그만큼 유용합니다. 이 방법은 인텔에서 소개된 방법을 기반으로 합니다. 먼저 다음 경로에 `Microsoft.PowerShell_profile.ps1` 파일이 있는지 확인해야 합니다.

C:\Users\<사용자 이름>\Documents\WindowsPowerShell

만약 파일이 없다면 PowerShell을 실행하고 다음 명령어를 입력합니다. `notepad $Profile` 명령어를 실행하면 메모장이 열리고 프로필 파일이 없으면 PowerShell이 파일을 생성할지 여부를 묻습니다. 파일을 생성하도록 허용합니다.

notepad $Profile

메모장을 닫은 후, 다음 명령어를 실행하여 PowerShell 5 이상 버전을 사용 중인지 확인합니다.

$PSVersionTable.PSVersion

그다음, 실행 정책을 RemoteSigned로 설정합니다.

set-executionpolicy remotesigned

추가적으로, PsUrlPSReadLine 모듈을 설치해야 합니다. 다음 명령어를 사용해 설치할 수 있지만, 오류가 발생하면 링크된 페이지의 안내에 따라 수동으로 설치하거나 저장소를 신뢰할 수 있는 저장소로 추가한 후 다시 시도해 볼 수 있습니다.

install-module PsUrl
install-module PSReadline

모듈 설치가 완료되면, 다음 경로의 파일을 엽니다.

C:\Users\<사용자 이름>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

파일에 다음 내용을 복사하여 붙여넣고 저장합니다.

$HistoryFilePath = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistoryFilePath } | out-null
if (Test-path $HistoryFilePath) { Import-Clixml $HistoryFilePath | Add-History }
# if you don't already have this configured...
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

이제 PowerShell에서 `Get-History` 명령어를 사용해 기록을 확인할 수 있습니다. 중요한 점은, PowerShell을 종료할 때 닫기 버튼을 사용하지 않고 `exit` 명령어를 사용해야 기록이 제대로 저장된다는 것입니다.

위쪽 및 아래쪽 화살표 키를 사용하여 이전 명령어를 탐색할 수 있습니다.