
[Out-GridView Команда позволяет отображать данные в виде интерактивной графической таблицы, которую можно фильтровать или сортировать по различным критериям. Команду Out-Gridview можно использовать в сценариях, где требуется предоставить пользователю простейший графический интерфейс для выбора объектов.
Использование таблиц Out-GridView
Давайте рассмотрим простейший пример использования команды Out-GridView для отображения списка служб Windows и некоторых их свойств:
Get-Service | Select DisplayName,Status,ServiceName,Can* | Out-GridView
Как видите, появилась графическая табличная форма со списком свойств службы Windows. Команда автоматически устанавливает имена столбцов на основе свойств объекта или типа данных, а также расширяет свойства PSObject, если формат данных не может быть определен.
В форме можно выполнить поиск с помощью поля Фильтр.
Вы также можете использовать Добавить критерии для поиска в таблице. На скриншоте ниже я создал простейший фильтр со списком запущенных служб, имеющих VMW в их именах. Фильтр создается непосредственно на основе значений свойств объекта.
Или давайте выведем список TOP 10 процессов с наибольшей загрузкой процессора (я изменил название окна Out-GridView с помощью функции -Title опция):
Get-Process | Sort-Object CPU -Descending | Select -First 10 | Out-GridView -Title "Top 10 CPU processes"
Вы можете быстро отсортировать содержимое таблицы по возрастанию/убыванию, щелкнув заголовок столбца.
Команда 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
Сценарий перезапустит только ту службу, которую выбрал пользователь.
Вы можете сохранить выбранные пользователем объекты в переменную:
$Svcs = Get-Service | Where-Object {$_.status -eq 'running'}| Out-GridView -Title "Select services" –PassThru
Или можно сохранить только значения свойств. Для этого добавьте к предыдущей команде следующую строку:
| Select -ExpandProperty Name
Вы можете позволить пользователю выбрать только один элемент или несколько элементов в таблице, используя следующие опции:
-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
Чтобы получить список сеансов 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
С помощью команды Invoke-Command можно получать данные с удаленных компьютеров и отображать их в таблице:
Invoke-Command -ComputerName be-dc01, mun-dc01, mun-dc02 -ScriptBlock {Get-Culture} | Select-Object PSComputerName,DisplayName| Out-GridView
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.