Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

PowerShell Out-GridView 활용 가이드: 테이블 데이터 보기와 선택하기

Out-GridView cmdlet은 데이터를 대화형 그래픽 테이블로 표시하며, 다양한 기준에 따라 필터링하거나 정렬할 수 있습니다. 사용자에게 가장 간단한 GUI를 제공해 객체를 선택하게 하고 싶은 PowerShell 스크립트에서 유용하게 활용할 수 있습니다.

사실 Out-GridView는 Windows Form Control의 표준 그래픽 폼인 .NET DataGridView를 실행하는 래퍼(wrapper)입니다.

Out-GridView 테이블 사용법

Windows 서비스 목록과 주요 속성을 표시하는 가장 간단한 예제부터 살펴보겠습니다.

Get-Service | Select DisplayName,Status,ServiceName,Can* | Out-GridView

명령을 실행하면 Windows 서비스 속성 목록이 담긴 그래픽 테이블 폼이 나타납니다. 이 cmdlet은 객체 속성이나 데이터 형식을 기반으로 열 이름을 자동으로 지정하며, 데이터 형식을 판별할 수 없는 경우에는 PSObject 속성을 확장해 표시합니다.

상단의 필터 상자(Filter)를 이용하면 폼 내에서 원하는 데이터를 빠르게 검색할 수 있습니다.

또한 Add criteria 버튼을 사용해 조건 기반 검색도 가능합니다. 아래 예시는 이름에 VMW가 포함된 실행 중인 서비스만 표시하는 간단한 필터입니다. 필터는 객체 속성 값을 기반으로 직접 생성됩니다.

이번에는 CPU 사용률이 가장 높은 TOP 10 프로세스 목록을 표시해 보겠습니다. –Title 옵션으로 Out-GridView 창의 제목도 변경했습니다.

Get-Process | Sort-Object CPU -Descending | Select -First 10 | Out-GridView -Title "Top 10 CPU processes"

열 머리글을 클릭하면 테이블 내용을 오름차순/내림차순으로 즉시 정렬할 수 있습니다.

PassThru 스위치를 사용한 Out-GridView

Out-GridView의 가장 강력한 기능은 바로 –PassThru 옵션입니다. 이 옵션은 PowerShell 스크립트에 사용자 친화적인 GUI를 한 단계 끌어올려 줍니다.

이 옵션은 PowerShell 3.0 이상에서 사용할 수 있으며, 사용자가 테이블에서 하나 이상의 객체를 선택하면 표준 파이프를 통해 스크립트의 다음 cmdlet으로 전달합니다.

예를 들어 다음 PowerShell 스크립트는 실행 중인 Windows 서비스 목록을 표시합니다. 사용자가 목록에서 서비스를 선택하고 확인(OK)을 클릭하면 해당 서비스만 재시작됩니다.

Get-Service | Where-Object {$_.status -eq 'running'}| Out-GridView -Title "Select service to restart" –PassThru -OutputMode Multiple | Restart-service –verbose

사용자가 선택한 객체를 변수에 저장할 수도 있습니다.

$Svcs = Get-Service | Where-Object {$_.status -eq 'running'}| Out-GridView -Title "Select services" –PassThru

속성 값만 저장하고 싶다면 앞의 명령에 다음 파이프를 추가하면 됩니다.

| Select -ExpandProperty Name

다음 옵션을 사용하면 사용자가 테이블에서 항목을 하나만 선택할지, 여러 개를 선택할지 지정할 수 있습니다.

-OutputMode Single / -OutputMode Multiple

테이블에서 여러 행을 선택하려면 Ctrl 키를 누른 상태에서 클릭하면 됩니다.

PowerShell 스크립트에서 GUI로 Out-GridView 활용하기

Out-GridView를 활용한 더 흥미로운 실전 예제들을 소개합니다.

PowerShell 기록에서 이전 명령 목록을 표시하고, 선택한 명령을 다시 실행하려면:

Get-History | Out-GridView -PassThru | Invoke-Expression

설치 가능한 Windows 선택적 구성 요소 목록을 표시하고, 선택한 구성 요소(예: RSAT Active Directory 관리 도구, SSH 클라이언트)를 설치하려면:

Get-WindowsCapability -Online | Where-Object {$_.State –eq "NotPresent"}| Out-GridView -PassThru |Add-WindowsCapability –Online

RDS 팜의 Connection Broker에서 RDP 세션 목록을 가져온 뒤, 사용자가 선택한 데스크톱에 RDP 섀도우 연결로 접속하려면:

import-module remotedesktop
$cbserver = "munrdsbroker1.woshub.com"
$id = get-rdusersession -ConnectionBroker $cbserver | Out-GridView -title "RD Connection" -PassThru | select hostserver, unifiedsessionid
$id2 = $id | select -ExpandProperty unifiedsessionid
$srv = $id | select -ExpandProperty hostserver
mstsc /v:"$srv" /shadow:"$id2" /control /noconsentprompt

AD PowerShell 모듈의 Get-ADUser cmdlet을 사용하면 특정 OU에서 활성화된 사용자 목록을 표시하고, 선택한 사용자의 도메인 암호를 재설정할 수 있습니다.

Import-Module ActiveDirectory
$NewPasswd=Read-Host "Enter a new user password" –AsSecureString
Get-ADUser -filter {Enabled -eq "true"} -properties Name, displayname,EmailAddress,pwdLastSet -SearchBase 'OU=Berlin,OU=DE,DC=woshub,DC=com'| Out-GridView -PassThru –title "Select a user to reset a password"| Set-ADAccountPassword -NewPassword $NewPasswd -Reset

Invoke-Command를 사용하면 원격 컴퓨터에서 데이터를 가져와 테이블 형태로 표시할 수도 있습니다.

Invoke-Command -ComputerName be-dc01, mun-dc01, mun-dc02 -ScriptBlock {Get-Culture} | Select-Object PSComputerName,DisplayName| Out-GridView

아쉽게도 Out-GridView cmdlet은 Windows Server Core에서는 사용할 수 없습니다. 실행하면 다음과 같은 오류가 발생합니다.

out-gridview : To use the Out-GridView, install Windows PowerShell ISE by using Server Manager, and then restart this application. (Could not load file or assembly 'Microsoft.PowerShell.GraphicalHost, Version=3.0.0.0, Culture=neutral, PublicKeyToken=xxxxx' or one of its dependencies. The system cannot find the file specified.)

하지만 많은 cmdlet이 지원하는 –ComputerName 옵션을 사용하면 Server Core 서버에도 접근할 수 있습니다.

Get-Service -ComputerName lon-dc02 | Where-Object {$_.status -eq 'running'}| Out-GridView –Title "Select service to restart" -OutputMode Single|Restart-Service -Verbose

참고로 Microsoft는 PowerShell Core 6.x에서 Out-GridView cmdlet을 제거했다가, 7.0 버전에서 다시 포함했습니다. PowerShell 6.x를 사용 중이라면 다음 명령으로 최신 버전으로 업데이트하세요.

iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

이처럼 Out-GridView를 활용하면 PowerShell 스크립트에 훌륭한 그래픽 인터페이스를 손쉽게 추가할 수 있습니다.