Использование командлета Out-Gridview для выбора в табличных данных в скриптах PowerShell

Использование командлета Out-Gridview для выбора в табличных данных в скриптах PowerShell

Командлет Out-GridView позволяет вывести данные в виде интерактивной графической таблицы с возможностью фильтрации и сортировки по различным признакам. Вы можете использовать командлет Out-Gridview в скриптах, где нужно предоставить простейший GUI интерфейс для выбора объектов пользователю.

Out-GridView по сути является оболочкой для запуска стандартной графической формы .NET DataGridView из Windows Form Control.

Рассмотрим простейший пример использования командлета для вывода списка служб Windows и некоторых их свойств:

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

Out-GridView командлет PowerShell для отображения табличных данных

Как вы видите перед вами открылась графическая форма с таблицей, представляющей список свойств служб Windows. Командлет автоматически именует столбцы на основе свойства объекта и типа данных, расширяет свойства PSObject, если определение формата недоступно.

Прямо из этой формы вы можете выполнять поиск либо с помощью поля для ввода Filter:

поиск по объектам в Out-GridView

Либо с помощью кнопки Add criteria. На следующем скриншоте я создал простейший фильтр со списком запущенных служб, в имени которых есть символы VMW. Фильтр создается прямо по значениям свойств объектов.

фильтры в Out-GridView

Или, например, выведем список ТОП 10 процессов, которые сильнее всего используют CPU (с помощью параметра –Title я изменил заголовок окна Out-GridView):

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

Можно быстро отсортировать содержимое таблицы по убыванию/возрастанию, щелкнув по названию столбца.

Out-GridView сортировка

Однако наиболее мощной возможностью Out-Gridview, которая предоставляет новый уровень удобного графического интерфейса для ваших PowerShell скриптов, является параметр –PassThru.

Данный параметр доступен начиная с версии PowerShell 3.0 и позволяет пользователю выбрать в таблице одну или несколько объектов и передать их по конвейеру через стандартный пайп на вход следующим командлетам в скрипте PowerShell.

Например, следующий PowerShell скрипт выведет в таблицу список запущенных служб Windows. Пользователь должен выбрать в таблице нужную службу и нажать Ok.

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

Скрипт перезапустит только выбранную пользователем службу.

использование Out-GridView с параметром PassThru для передачи выбранных объектов в конвейер powershell

Вы можете сохранить объекты, выбранный пользователем в переменную:

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

Или можно сохранить только значения определенного свойства. Для этого добавьте к предыдущей команде:

| Select -ExpandProperty Name

сохранить выбор Out-GridView в переменную

Вы можете разрешить пользователю выбирать только один элемент в таблице или сразу несколько с помощью параметров:

-OutputMode Single
и
-OutputMode Multiple

Зажмите ctrl, чтобы выделить несколько разных строк в таблице.

Еще несколько интересных сценариев использования командлета Out-GridView.

Вывести список предыдущих команд из истории PowerShell и повторно выполнить выбранные команды:

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

Вывести список дополнительных компонентов Windows и установить выделенные компоненты (например инструменты управления Active Directory из RSAT и SSH клиент):

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

установить компоненты Windows через powershell

Получить список RDP сессии с Connection Broker в RDS ферме и подключиться к выбранному пользователю с помощью теневого подключения:

import-module remotedesktop
$cbserver = "srv-rdsbroker1.winitpro.ru"
$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

С помощью командлета Get-ADUser из модуля AD PowerShell можно вывести список включенных пользователей в определенном OU и сбросить пароль в домене.

Import-Module ActiveDirectory
$NewPasswd=Read-Host "Введите новый пароль пользователя" –AsSecureString
Get-ADUser -filter {Enabled -eq "true"} -properties Name, displayname,EmailAddress,pwdLastSet -SearchBase ‘OU=ru,DC=test,DC=com’| Out-GridView -PassThru –title “Выберите пользователя чтобы сбросить пароль”| Set-ADAccountPassword -NewPassword $NewPasswd -Reset

вывести пользователей домена AD через Out-GridView

Через Invoke-Command можно получить данные с удаленных компьютеров и представить их в таблице:

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

К сожалению, командлет Out-GridView нельзя использовать в 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=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.)

Но вы можете использовать для обращения к Server Core параметр –ComputerName, который есть у большинства командлетов. Например:

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

Microsoft по какой-то причине убрала командлет Out-GridView из PowerShell Core 6.x, но в 7.0 версии его вернули. Если у вас используется версиях PowerShell 6.x, обновите ее до последние командой:

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

Как вы видите, Out-GridView позволяет добавить удобный графический интерфейс вашим скриптам PowerShell

Windows 10
Использование командлета Out-Gridview для выбора в табличных данных в скриптах PowerShell