## 개요 리눅스에서 [[Bash History]]에 대해서 알아봤었다. 윈도우에도 비슷한게 있을게 분명하다. powershell을 사용해본 사람이라면, 사용했던 커맨드를 `bash_history`와 유사하게 화살표를 이용해서 불러올 수 있었던 것을 기억하고 있을 것이다. 오늘은 윈도우 시스템에서 많이 사용하는 powershell history에 대해서 자세히 알아보고, 어떤 정보들이 남아 있고, 삭제할 수 있는 방법에는 무엇이 있는지 알아볼 것이다. ## 데이터 - 세선 히스토리 ### 데이터 조회 윈도우에서는 리눅스 시스템과 쉘이 작동하는 방식이 조금 다르다는 사실을 인지해야 한다. 우선 윈도우에서는 파워쉘이 세션 단위로 작동하며, 세션 단위로 기록되는 데이터가 존재하고, 글로벌하게 사용되는 데이터가 존재한다. 먼저 세션 단위로 사용하는 명령어 데이터는 캐시에 저장되며, 파일의 형태로 별도로 남아있지는 않는다. 그렇기 때문에 명령어를 통해 확인해볼 수 있다. ```powershell Get-History ``` 다양한 인자값을 이용하여 특정 커맨드를 조회/실행할 수 있다. 다시 말하지만 이 명령어를 csv의 형태로 저장하거나 하는 옵션은 존재하지만, 자동으로 저장하지는 않으니 유의하자. ### 데이터 삭제 데이터를 조회할 수 있으니 삭제하는 옵션도 있을 것이다. 아래 삭제하는 명령어를 적어놨다. 인수를 통해 특정한 레코드만 삭제할 수도 있고, 전체를 삭제할 수도 있으며, 더 나아가서는 최근/ 옛날것 중 몇개만 삭제할 수도 있다. ```powershell Clear-History ``` 물론 이외에도 다양한 옵션이 있지만 그건 [공식 Help 문서](https://learn.microsoft.com/ko-kr/powershell/module/microsoft.powershell.core/?view=powershell-7.4)를 공부해 보는걸 추천한다. ## 경로 - 글로벌 사실 우리가 기다려온 것은 이게 아닐까 싶다. [[Bash History]]도 파일의 형태로 저장되기 때문에 우리는 powershell 기록 역시 파일의 형태로 보관되는 것을 기대한다. ``` APPDATA\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt ``` 위에 제시된 경로에 텍스트 파일의 형태로 존재하며, 각 라인별로 저장된 커맨드가 한줄 씩 들어있다. 파일을 변경하는 것을 시도해본 결과, 개행이 추가되면, 하나의 커맨드이더라도, 기록에서는 별개의 커맨드로 나오게 되는 것을 확인했다. > [!Question] 스크립트에 의한 명령어도 저장되나요? > ConsoleHost_history.txt 파일은 사용자가 직접 입력한 데이터만이 저장되는 위치이다. > 따라서 해당 파일에 데이터가 있다면, 사용자가 집적 입력한 것이니, 사용자 행위로도 해석할 수 있을 것이다. > > 자동 스크립트에 의해 실행되는 명령어는 사용자가 입력한 정보가 아니기 때문에 해당 파일에는 저장되지 않으며, 별도로 이벤트 로그를 분석하여 확인해볼 수 있다. 또 세션 단위의 기록을 저장하는 데이터와는 별개라는 점 역시 확인했는데, `Clear-History` 명령어를 이용해서는 이 파일의 데이터를 삭제할 수 없다. ### 유효기간 & 최대 용량 몇일간 기다려본 결과, 파일 내부의 데이터에 대해서 별도의 유효기간이 있지는 않아보였다. 다만, 최대 저장하는 명령의 개수를 설정할 수는 있었다. 다음 명령어를 이용해서 값을 설정할 수 있다. 기본 설정 값은 4096 개이고, 최대 설정값은 용량이 허용하는 한, 임의로 설정이 가능했다. ```powershell Set-PSReadLineOption -MaximumHistoryCount %n ``` ## 결론 [[Bash History]]와 비슷한 형태로 남지만 조금 다른 양상을 보이는 Powershell history에 대해서 알아보았다. powershell 실행 기록을 이벤트 로그같은 다른 아티팩트에서 찾아보는 방법도 있지만, 단기적인 양상에서 확인하는 방법으로는 추천할 만한 방법인 것 같다.