PowerShell에서 출력의 접근성 향상

대부분의 터미널 환경에는 원시 텍스트만 표시됩니다. 화면 읽기 프로그램을 사용하는 사용자는 원시 출력에 콘텐츠 형식의 특징을 지정하는 접근성 메타데이터가 없기 때문에 대량의 원시 텍스트를 사용할 때 지루한 설명에 직면하게 됩니다.

PowerShell에서 출력의 접근성을 개선하는 방법에는 두 가지가 있습니다.

  • 화면 읽기 기술을 지원하는 다른 도구에서 볼 수 있는 방식으로 데이터를 출력합니다.
  • 원하는 데이터를 필터링 및 선택하여 터미널에 표시되는 출력 양을 줄이고 텍스트를 더 읽기 쉬운 형식으로 출력합니다.

터미널 외부의 도구에 데이터 표시

호스트에 출력하는 대신 많은 양의 데이터의 경우 화면 읽기 기술을 지원하는 다른 도구에서 볼 수 있는 형식으로 출력을 작성하는 것이 좋습니다. 다른 애플리케이션에서 열 수 있는 형식으로 파일에 데이터를 저장해야 할 수도 있습니다.

Windows의 Out-GridView 명령

출력이 크기가 작거나 보통인 경우에는 Out-GridView 명령을 사용합니다. 출력은 스프레드시트와 마찬가지로 테이블 형식으로 WPF(Windows Presentation Foundation)를 사용하여 렌더링됩니다. GridView 컨트롤을 사용하면 데이터를 정렬, 필터링 및 검색할 수 있으므로 읽어야 하는 데이터의 양이 줄어듭니다. GridView 컨트롤은 화면 읽기 프로그램에서도 액세스할 수 있습니다. Windows에 기본 제공되는 내레이터 도구는 열 이름 및 행 수를 포함하여 GridView 세부 정보를 읽을 수 있습니다.

다음 예제에서는 GridView 컨트롤에 서비스 목록을 표시하는 방법을 보여 줍니다.

Get-Service | Out-GridView

Out-GridView 명령은 Windows의 PowerShell에서만 사용할 수 있습니다.

CSV(문자 구분 값) 형식

Microsoft Excel과 같은 스프레드시트 애플리케이션은 CSV 파일을 지원합니다. 다음 예제에서는 명령의 출력을 CSV 파일에 저장하는 방법을 보여 줍니다.

Get-Service | Export-Csv -Path .\myFile.csv
Invoke-Item .\myFile.csv

Invoke-Item 명령은 일반적으로 Microsoft Excel인 CSV 파일의 기본 응용 프로그램에서 파일을 엽니다.

HTML(HyperText Markup Language) 형식

HTML 파일은 Microsoft Edge와 같은 웹 브라우저에서 볼 수 있습니다. 다음 예제에서는 명령의 출력을 HTML 파일에 저장하는 방법을 보여 있습니다.

Get-Service | ConvertTo-Html | Out-File .\myFile.html
Invoke-Item .\myFile.html

Invoke-Item 명령은 기본 웹 브라우저에서 파일을 엽니다.

출력 양 줄이기

출력의 접근성을 향상시키는 한 가지 방법은 터미널에 표시되는 출력의 양을 줄이는 것입니다. PowerShell에는 원하는 데이터를 필터링하고 선택하는 데 도움이 되는 몇 가지 명령이 있습니다.

데이터 선택 및 필터링

대용량 데이터 탑재를 반환하는 대신 , Select-ObjectSort-Object 등의 Where-Object명령을 사용하고 출력 양을 줄입니다. 다음 예제에서는 컴퓨터의 서비스 목록을 가져옵니다.

다음 각 명령은 다른 방식으로 출력을 향상시킵니다.

  • 매개 변수는 -ErrorAction SilentlyContinue 사용자에게 일부 서비스를 볼 수 있는 권한이 없는 경우 생성될 수 있는 오류 메시지를 표시하지 않습니다.
  • Where-Object 명령은 실행 중이며 설명에 있는 event 서비스만 표시하도록 목록을 필터링하여 반환되는 항목 수를 줄입니다.
  • Select-Object 명령은 서비스 이름 및 표시 이름만 선택합니다.
  • Format-List 명령은 화면 읽기 프로그램에 더 나은 내레이션 환경을 제공하는 목록 형식으로 출력을 표시합니다.
Get-Service -ErrorAction SilentlyContinue |
    Where-Object {$_.Status -eq 'Running' -and $_.Description -match 'event'} |
    Select-Object Name, DisplayName |
    Format-List

계산된 속성을 사용하여 출력의 서식을 다시 지정합니다.

PowerShell이 출력하는 .NET 객체의 기본 속성 이름은 장황하고 혼란스럽게 여겨질 수 있습니다. 계산 속성을 사용하여 내레이터 기술에서 읽을 때 보다 쉽게 이해할 수 있는 속성 이름과 값을 변경할 수 있습니다.

다음 예제에서는 메모리 사용량별로 상위 5개 프로세스를 가져오고 프로세스 이름 및 메모리 사용량을 메가바이트 단위로 표시하는 방법을 보여 줍니다.

Get-Process |
    Sort-Object WorkingSet -Descending |
    Select-Object -First 5 -Property ProcessName,
        @{n="MemoryMB"; e={'{0:N}' -f ($_.WorkingSet/1Mb)}} |
    Format-List

기본적으로 Get-Process WorkingSet사용된 메모리 바이트 수로 표시합니다. 서식을 지정하지 않으면 숫자의 크기를 이해하기 어려울 수 있습니다. 계산된 속성은 바이트 수를 메가바이트로 변환하고 쉼표로 숫자의 서식을 지정하고 값을 10진수 두 자리로 제한합니다.

ProcessName : vmmemWSL
MemoryMB    : 1,217.69

ProcessName : Memory Compression
MemoryMB    : 780.45

ProcessName : Code
MemoryMB    : 726.43

ProcessName : OUTLOOK
MemoryMB    : 460.16

ProcessName : msedgewebview2
MemoryMB    : 428.94

추가 자료