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

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

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

Использование таблиц Out-GridView

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

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

Использование таблиц Out-GridView в PowerShell

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

В форме можно выполнить поиск с помощью поля Фильтр.

поиск в out-gridview

Вы можете получить доступ к данным в таблицах Excel непосредственно из PowerShell.

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

добавление критерия в out-gridview для фильтрации результатов

Или давайте выведем список TOP 10 процессов с наибольшей загрузкой процессора (я изменил название окна Out-GridView с помощью функции -Title опция):

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

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

Сортировка с помощью Powershell Out-GridView

Команда Out-GridView с переключателем PassThru

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

Опция доступна в 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

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

Команда PowerShell Out-GridView с переключателем PassThru Switch

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

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

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

| Select -ExpandProperty Name

обработка вывода Out-GridView

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

-OutputMode Single and -OutputMode Multiple

Нажмите и удерживайте кнопку Ctrl чтобы выбрать несколько строк в таблице.

Как использовать Out-Gridview в качестве графического интерфейса в сценарии PowerShell?

Вот еще несколько интересных примеров использования 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

Select-Object с Out-GridView

Чтобы получить список сеансов RDP от брокера подключений фермы RDS и подключиться к выбранному рабочему столу пользователя с помощью теневого соединения 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

Вы можете использовать команду Get-ADUser из модуля AD PowerShell для отображения списка включенных пользователей в определенном 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

Использование Out-GridView для управления пользователями и объектами AD

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

Invoke-Command -ComputerName be-dc01, mun-dc01, mun-dc02 -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=xxxxx' or one of its dependencies. The system cannot find the file specified.)

Однако можно использовать команду -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 удалила команду Out-GridView из PowerShell Core 6.x, но вернула ее в версии 7.0. Если вы используете PowerShell 6.x, обновите его до последней версии с помощью этой команды:

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *