PowerShell'de Tablo Verilerini Görüntülemek ve Seçmek için Out-GridView Kullanma


Out-GridView cmdlet'i, verilerin farklı ölçütlere göre filtrelenebilen veya sıralanabilen etkileşimli bir grafik tablo olarak görüntülenmesini sağlar. Out-Gridview cmdlet'ini, bir kullanıcıya nesneleri seçmesi için en basit GUI'yi sağlamak istediğiniz betiklerde kullanabilirsiniz.

Aslında Out-GridView, bir Windows Form Denetimi'nden standart bir grafik form olan .NET DataGridView'ü çalıştıran bir sarmalayıcıdır.

Out-GridView Tablolarını Kullanma

Windows hizmetlerinin bir listesini ve bazı özelliklerini görüntülemek için Out-GridView cmdlet'ini kullanmanın en basit örneğine bakalım:

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

Gördüğünüz gibi, Windows hizmet özelliklerinin listesini içeren bir grafik tablo formu ortaya çıktı. Cmdlet, sütun adlarını nesne özelliklerine veya veri türüne göre otomatik olarak ayarlar ve veri biçimi tanımlanamazsa PSObject özelliklerini genişletir.

Filtre kutusunu kullanarak formu arayabilirsiniz.

Excel tablolarındaki verilere doğrudan PowerShell'den erişebilirsiniz.

Tabloda arama yapmak için Kriter ekle düğmesini de kullanabilirsiniz. Aşağıdaki ekran görüntüsünde, adlarında VMW bulunan çalışan hizmetlerin listesini içeren en basit filtreyi oluşturdum. Filtre, doğrudan nesne özelliklerinin değerlerine göre oluşturulur.

Veya en yüksek CPU kullanımına sahip TOP 10 işlemlerin bir listesini görüntüleyelim (Out-GridView penceremin adını -Title seçeneğini kullanarak değiştirdim):

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

Sütun başlığına tıklayarak tablo içeriğini artan/azalan düzende hızlı bir şekilde sıralayabilirsiniz.

PassThru Anahtarlı Out-GridView cmdlet'i

Ancak, en güçlü Out-Gridview özelliği, PowerShell betikleriniz için kullanıcı dostu yeni bir GUI düzeyi sağlayan -PassThru seçeneğidir.

Seçenek PowerShell 3.0 veya sonraki sürümlerde mevcuttur, kullanıcının tablodaki bir veya daha fazla nesneyi seçmesine izin verir ve bunları standart boruyu kullanarak PowerShell betiğinizdeki sonraki cmdlet'lere iletir.

Örneğin, aşağıdaki PowerShell betiği, çalışan Windows hizmetlerinin bir listesini görüntüler. Kullanıcı listeden bir hizmet seçer ve Tamam'ı tıklar.

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

Komut dosyası, yalnızca kullanıcı tarafından seçilen hizmeti yeniden başlatır.

Kullanıcı tarafından seçilen nesneleri bir değişkene kaydedebilirsiniz:

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

Veya yalnızca bir özelliğin değerlerini kaydedebilirsiniz. Bunu yapmak için önceki komuta aşağıdaki boruyu ekleyin:

| Select -ExpandProperty Name

Aşağıdaki seçenekleri kullanarak bir kullanıcının tabloda yalnızca bir öğeyi veya birden çok öğeyi seçmesine izin verebilirsiniz:

-OutputMode Single and -OutputMode Multiple

Tabloda birden çok satır seçmek için Ctrl'yi basılı tutun.

Out-Gridview PowerShell Komut Dosyasında GUI Olarak Nasıl Kullanılır?

Out-GridView kullanımına ilişkin bazı daha ilginç örnekler.

PowerShell geçmişinden önceki komutların bir listesini görüntülemek ve seçilen komutları yeniden çalıştırmak için:

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

Ek Windows bileşenlerinin bir listesini görüntülemek ve seçilenleri yüklemek için (örneğin, RSAT Active Directory yönetim araçları ve SSH istemcisi):

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

RDS grubunuzun Bağlantı Aracısından RDP oturumlarının bir listesini almak ve bir RDP gölge bağlantısı kullanarak kullanıcının seçili masaüstüne bağlanmak için:

import-module remotedesktop
$cbserver = "munrdsbroker1.a-d.site"
$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

Belirli bir kuruluş birimindeki etkin kullanıcıların bir listesini görüntülemek ve kullanıcının etki alanı parolasını sıfırlamak için AD PowerShell modülünden Get-ADUser cmdlet'ini kullanabilirsiniz:

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=a-d,DC=com’| Out-GridView -PassThru -title “Select a user to reset a password”| Set-ADAccountPassword -NewPassword $NewPasswd -Reset

Invoke-Command'ı kullanarak uzak bilgisayarlardan veri alabilir ve bunları bir tabloda gösterebilirsiniz:

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

Ne yazık ki, Out-GridView cmdlet'i Windows Server Core'da kullanılamaz. Çalıştırırsanız, aşağıdaki hata oluşur:

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.)

Ancak, birçok cmdlet'in Sunucu Çekirdeğine erişmesi gereken -ComputerName seçeneğini kullanabilirsiniz. Örneğin:

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

Bazı nedenlerden dolayı Microsoft, Out-GridView cmdlet'ini PowerShell Core 6.x'ten kaldırdı, ancak 7.0 sürümünde geri verdi. PowerShell 6.x kullanıyorsanız, bu komutu kullanarak onu en son sürüme güncelleyin:

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

Gördüğünüz gibi Out-GridView, PowerShell betiklerinize hoş bir grafik arayüz eklemenizi sağlar.

İlgili makaleler