본문 바로가기
stdFrog/알쓸잡

[Powershell] 파워쉘 출력 서식 변경 및 업데이트(ps1xml)

by stdFrog 2022. 1. 12.

윈도우에서 파워쉘을 사용하던 중, 어느 순간부터 Get-ChildItem의 호스트 출력이 한 칸씩 밀려 나왔습니다.

처음엔 그냥 그런가 보다 했는데, 약간의 강박과 시간적 여유가 더해져 집착으로 변하기 시작하더군요.

 

개인적으로 검색 능력이 부족해서 시간이 오래 걸리기도 했고, 한글로 된 자료도 없는 것 같아 관련 글을 작성하게 되었습니다.

 

필요한 부분만 간단하게 알아보겠습니다.

 

시작하기 전에, $PSHOME이라는 자동 변수를 사용하여 설치 디렉터리로 이동해줍니다.

PS> CD $PSHOME

: C:\Windows\System32\WindowsPowerShell\v1.0

1. 출력 형식

- 파워쉘 실행 함수는 기본적으로 출력 형식과 목적지가 정해져있습니다.

 

예를 들어, Get-ChildItem이나 Get-Process와 같은 함수는 Format-Table(테이블 보기 형식)로 출력됩니다. 이러한 기본값을 파워쉘의 Ps1Xml파일과 dll파일에서 확인할 수 있는데, Ps1Xml파일은 파워쉘의 디스플레이를 구성하는 중요한 문서(서식)라 직접 편집하거나 삭제할 수 없습니다.

 

단, 원본 파일을 복사하여 사용자가 지정한 데이터나 형식을 추가하고 서식을 업데이트 할 수 있습니다.

 

먼저, Get-ChildItem의 OutPutType(System)을 확인하기 위해 아래 명령 중 하나를 입력합니다.

PS> Get-Command Get-ChildItem | Select-Object OutputType
PS> gcm gci | Select OutputType

: {System.IO.FileInfo, System.IO.DirectoryInfo}

2. 문자열 검색

- 반환된 값을 복사한 후 Select-String을 이용해 일치하는 문자열이 있는지 검색합니다.

PS> Select-String -path $PSHOME\*format.ps1xml -pattern System.IO.FileInfo,System.IO.DirectoryInfo
PS> sls $PSHOME\*format.ps1xml -pattern System.IO.FileInfo,System.IO.DirectoryInfo

: C:\Windows\System32\WindowsPowerShell\v1.0\FileSystem.format.ps1xml:22:    <TypeName>System.IO.DirectoryInfo</TypeName>
: C:\Windows\System32\WindowsPowerShell\v1.0\FileSystem.format.ps1xml:23:    <TypeName>System.IO.FileInfo</TypeName>
: C:\Windows\System32\WindowsPowerShell\v1.0\FileSystem.format.ps1xml:122:  <TypeName>System.IO.FileInfo</TypeName>
: C:\Windows\System32\WindowsPowerShell\v1.0\FileSystem.format.ps1xml:200:    <TypeName>System.IO.DirectoryInfo</TypeName>

일치하는 파일을 복사하여 이름을 변경해준 후 xml 요소를 편집해주면 됩니다.


3. Xml 편집

※ 사진을 반드시 참고하여 편집하시기 바랍니다.

- 속성 이름이나 테이블 길이, 넓이 등등 여러 요소를 추가하거나 편집할 수 있습니다.

 

- 저는 Get-ChildItem 함수를 사용했을 때 출력되는 값의 길이와 너비를 자동 조절(Autosize)해주기 위해 아래와 같은 문구를 추가하였습니다.

<TableControl>
<AutoSize/>

Xml 요소 편집을 끝냈으면 파일을 저장한 후 업데이트해줍니다.


4. 서식 업데이트

- 잘못된 값이 들어간 경우 파워쉘에서 오류를 반환합니다.

 

Update-FormatData 함수는 현재 세션(Current Session)에서 서식 데이터를 업데이트합니다.

PS> Update-FormatData -PrependPath .\FileSystem_Custom.format.ps1xml

정상적으로 업데이트되었다면, 해당 함수를 실행했을 때의 결과가 변경된 것을 확인하실 수 있습니다.


추가 정보

만약, 매번 업데이트된 환경으로 시작하고 싶다면 다음과 같이 설정해주시면 됩니다.

PS> notepad $PROFILE

- $PROFILE은 현재 세션의 경로를 뜻합니다.
- $PROFILE 내에 텍스트 파일을 생성한 후 다음과 같이 입력합니다.
> Update-FormatData -PrependPath $PSHOME\FileSystem_Custom.format.ps1xml

위 설정을 완료하면 세션이 시작될 때마다 Update-Formatdata함수를 자동 실행합니다.

반응형

댓글