ค้นหาเว็บไซต์

การใช้ Out-GridView เพื่อดูและเลือกข้อมูลตารางใน PowerShell


cmdlet Out-GridView อนุญาตให้แสดงข้อมูลเป็นตารางกราฟิกเชิงโต้ตอบที่สามารถกรองหรือจัดเรียงตามเกณฑ์ที่แตกต่างกัน คุณสามารถใช้ Out-Gridview cmdlet ในสคริปต์ที่คุณต้องการให้ผู้ใช้มี GUI ที่ง่ายที่สุดในการเลือกวัตถุ

อันที่จริง Out-GridView เป็นตัวรวมในการเรียกใช้ .NET DataGridView ซึ่งเป็นรูปแบบกราฟิกมาตรฐานจาก Windows Form Control

การใช้ตาราง Out-GridView

มาดูตัวอย่างที่ง่ายที่สุดของการใช้ Out-GridView cmdlet เพื่อแสดงรายการบริการ Windows และคุณสมบัติบางอย่าง:

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

อย่างที่คุณเห็น แบบฟอร์มตารางกราฟิกพร้อมรายการคุณสมบัติของบริการ Windows ปรากฏขึ้น cmdlet ตั้งชื่อคอลัมน์โดยอัตโนมัติตามคุณสมบัติของวัตถุหรือชนิดข้อมูล และขยายคุณสมบัติ PSObject หากไม่สามารถกำหนดรูปแบบข้อมูลได้

คุณสามารถค้นหาแบบฟอร์มโดยใช้กล่องตัวกรอง

คุณสามารถเข้าถึงข้อมูลในตาราง Excel ได้โดยตรงจาก PowerShell

คุณยังสามารถใช้ปุ่ม เพิ่มเกณฑ์ เพื่อค้นหาตาราง ในภาพหน้าจอด้านล่าง ฉันได้สร้างตัวกรองที่ง่ายที่สุดพร้อมรายการบริการที่กำลังทำงานอยู่ที่มีชื่อ VMW ตัวกรองถูกสร้างขึ้นตามค่าของคุณสมบัติของวัตถุโดยตรง

หรือแสดงรายการกระบวนการ 10 อันดับแรกที่มีการใช้งาน CPU สูงสุด (ฉันได้เปลี่ยนชื่อหน้าต่าง Out-GridView โดยใช้ตัวเลือก -Title):

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

คุณสามารถเรียงลำดับเนื้อหาตารางอย่างรวดเร็วจากน้อยไปหามากโดยคลิกที่ส่วนหัวของคอลัมน์

Out-GridView cmdlet พร้อมสวิตช์ PassThru

อย่างไรก็ตาม คุณลักษณะ Out-Gridview ที่ทรงพลังที่สุดคือตัวเลือก -PassThru ซึ่งให้ GUI ที่เป็นมิตรต่อผู้ใช้ในระดับใหม่สำหรับสคริปต์ PowerShell ของคุณ

ตัวเลือกนี้มีอยู่ใน PowerShell 3.0 หรือสูงกว่า อนุญาตให้ผู้ใช้เลือกหนึ่งหรือหลายวัตถุในตาราง และส่งต่อโดยใช้ไปป์มาตรฐานไปยัง cmdlets ถัดไปในสคริปต์ PowerShell ของคุณ

ตัวอย่างเช่น สคริปต์ PowerShell ต่อไปนี้แสดงรายการบริการ Windows ที่กำลังทำงานอยู่ ผู้ใช้เลือกบริการในรายการและคลิกตกลง

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 เป็น GUI ใน PowerShell Script ได้อย่างไร

ต่อไปนี้คือตัวอย่างที่น่าสนใจเพิ่มเติมของการใช้ 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 จาก Connection Broker ของฟาร์ม RDS ของคุณและเชื่อมต่อกับเดสก์ท็อปที่เลือกของผู้ใช้โดยใช้การเชื่อมต่อ RDP shadow:

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

คุณสามารถใช้ Get-ADUSer cmdlet จากโมดูล 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=a-d,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 cmdlet ใน 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 หลาย cmdlets ต้องมีเพื่อเข้าถึง 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 cmdlet ออกจาก PowerShell Core 6.x แต่ส่งคืนในเวอร์ชัน 7.0 หากคุณใช้ PowerShell 6.x ให้อัปเดตเป็นเวอร์ชันล่าสุดโดยใช้คำสั่งนี้:

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

อย่างที่คุณเห็น Out-GridView อนุญาตให้เพิ่มส่วนต่อประสานกราฟิกที่ดีให้กับสคริปต์ PowerShell ของคุณ

บทความที่เกี่ยวข้อง