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

Out-GridView по суті є оболонкою для запуску стандартної графічної форми .NET DataGridView из Контроль форми Windows.

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

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

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

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

Прямо з цієї форми ви можете виконувати пошук або за допомогою поля для введення Filter:

пошук по об'єктах в Out-GridView

Або за допомогою кнопки Додайте критерії. На наступному скріншоті я створив найпростіший фільтр зі списком запущених служб, в імені яких є символи VMW. Фільтр створюється прямо за значеннями властивостей об’єктів.

фільтри в Out-GridView

Або, наприклад, виведемо список ТОП 10 процесів, які найсильніше використовують CPU (за допомогою параметра –Заголовок я змінив заголовок вікна 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 параметр –Ім’я комп’ютера, Який є у більшості командлетів. наприклад:

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

Leave a Reply

Your email address will not be published. Required fields are marked *