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-GridViewGö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 -verboseKomut 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" -PassThruVeya yalnızca bir özelliğin değerlerini kaydedebilirsiniz. Bunu yapmak için önceki komuta aşağıdaki boruyu ekleyin:
| Select -ExpandProperty NameAş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 MultipleTabloda 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 -OnlineRDS 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 /noconsentpromptBelirli 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 -ResetInvoke-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-GridViewNe 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 -VerboseBazı 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.







