Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

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

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

จริงๆ แล้ว Out-GridView เป็น wrapper สำหรับรัน .NET DataGridView ฟอร์มกราฟิกมาตรฐานจาก Windows Form Control

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

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

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

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

คุณสามารถค้นหาฟอร์มได้โดยใช้กล่อง Filter

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

หรือมาแสดงรายการ TOP 10 กระบวนการที่ใช้ CPU สูงสุด (ฉันเปลี่ยนชื่อหน้าต่าง 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 ซึ่งให้ระดับ GUI ที่ใช้งานง่ายใหม่สำหรับสคริปต์ PowerShell ของคุณ

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

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 จากโมดูล PowerShell AD เพื่อแสดงรายการผู้ใช้ที่เปิดใช้งานใน 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 ไม่สามารถใช้ใน 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 ของคุณ