Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Cmdlet Out-GridView cho phép hiển thị dữ liệu dưới dạng bảng đồ họa tương tác có thể lọc hoặc sắp xếp dựa trên các tiêu chí khác nhau. Bạn có thể dùng cmdlet Out-Gridview trong script khi muốn cung cấp cho user GUI đơn giản nhất để chọn đối tượng.

Thực tế, Out-GridView là wrapper chạy .NET DataGridView, form đồ họa tiêu chuẩn từ Windows Form Control.

Sử dụng Bảng Out-GridView

Hãy xem ví dụ đơn giản nhất dùng cmdlet Out-GridView để hiển thị danh sách dịch vụ Windows và một số thuộc tính của chúng:

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

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Như bạn thấy, form bảng đồ họa với danh sách thuộc tính dịch vụ Windows xuất hiện. Cmdlet tự động đặt tên cột dựa trên thuộc tính đối tượng hoặc kiểu dữ liệu, và mở rộng thuộc tính PSObject nếu định dạng dữ liệu không xác định được.

Bạn có thể tìm kiếm trên form bằng hộp Filter.

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Bạn có thể truy cập dữ liệu trong bảng Excel trực tiếp từ PowerShell.

Bạn cũng có thể dùng nút Add criteria để tìm kiếm bảng. Trong screenshot dưới, tôi tạo bộ lọc đơn giản với danh sách dịch vụ đang chạy có VMW trong tên. Bộ lọc được tạo dựa trên giá trị thuộc tính đối tượng trực tiếp.

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Hoặc hãy hiển thị danh sách TOP 10 tiến trình sử dụng CPU cao nhất (tôi đã đổi tên cửa sổ Out-GridView bằng tùy chọn –Title):

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

Bạn có thể sắp xếp nhanh nội dung bảng tăng/giảm bằng cách nhấp header cột.

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Cmdlet Out-GridView với Switch PassThru

Tuy nhiên, tính năng mạnh mẽ nhất của Out-Gridview là tùy chọn –PassThru, cung cấp mức độ GUI thân thiện mới cho script PowerShell của bạn.

Tùy chọn này có sẵn trong PowerShell 3.0 trở lên, cho phép user chọn một hoặc nhiều đối tượng trong bảng, và truyền chúng qua pipe tiêu chuẩn đến cmdlet tiếp theo trong script PowerShell.

Ví dụ, script PowerShell sau hiển thị danh sách dịch vụ Windows đang chạy. User chọn dịch vụ trong danh sách và nhấp OK.

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

Script sẽ chỉ khởi động lại dịch vụ do user chọn.

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Bạn có thể lưu đối tượng do user chọn vào biến:

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

Hoặc bạn chỉ lưu giá trị thuộc tính. Để làm điều đó, thêm pipe sau vào lệnh trước:

| Select -ExpandProperty Name

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Bạn có thể cho phép user chọn chỉ một mục hoặc nhiều mục trong bảng bằng các tùy chọn sau:

-OutputMode Single and -OutputMode Multiple

Giữ Ctrl để chọn nhiều hàng trong bảng.

Cách Dùng Out-Gridview như GUI trong Script PowerShell?

Dưới đây là thêm một số ví dụ thú vị dùng Out-GridView.

Để hiển thị danh sách lệnh trước từ lịch sử PowerShell và chạy lại lệnh được chọn:

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

Để hiển thị danh sách thành phần Windows bổ sung và cài đặt các cái được chọn (ví dụ, công cụ quản trị RSAT Active Directory và SSH client):

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

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Để lấy danh sách phiên RDP từ Connection Broker của RDS farm và kết nối đến desktop được chọn của user bằng kết nối 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

Bạn có thể dùng cmdlet Get-ADUser từ module AD PowerShell để hiển thị danh sách user đã bật trong OU cụ thể và reset mật khẩu domain của user:

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

Sử dụng Out-GridView để Xem và Chọn Dữ liệu Bảng trong PowerShell

Sử dụng Invoke-Command, bạn có thể lấy dữ liệu từ máy tính từ xa và hiển thị trong bảng:

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

Rất tiếc, cmdlet Out-GridView không thể dùng trong Windows Server Core. Nếu chạy, lỗi sau xảy ra:

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

Tuy nhiên, bạn có thể dùng tùy chọn –ComputerName nhiều cmdlet có để truy cập Server Core. Ví dụ:

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

Với lý do nào đó, Microsoft đã xóa cmdlet Out-GridView khỏi PowerShell Core 6.x, nhưng đưa lại nó ở phiên bản 7.0. Nếu bạn dùng PowerShell 6.x, hãy cập nhật lên phiên bản mới nhất bằng lệnh:

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

Như bạn thấy, Out-GridView cho phép thêm giao diện đồ họa đẹp vào script PowerShell của bạn.