Mặc dù PowerShell là ngôn ngữ điều khiển, đôi khi cần thiết phải thông báo cho người dùng từ tập lệnh PS về một sự kiện cụ thể hoặc nhắc họ làm gì đó. Ví dụ, bạn có thể hiển thị thông báo pop-up hoặc balloon tip về việc hoàn thành một tập lệnh PoSh nặng hoặc khi một sự kiện quan trọng xảy ra.
Cách dễ nhất là hiển thị một cửa sổ chứa bất kỳ văn bản nào bằng cách gọi hệ thống tập lệnh Windows (Wscript) từ PowerShell.
Mã PowerShell này sẽ hiển thị một cửa sổ phổ biến với thông điệp của bạn và nút OK.
$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("The report generation script is successfully completed!")

Sử dụng các thuộc tính khác nhau của phương thức Popup, bạn có thể tùy chỉnh giao diện của cửa sổ modal chứa văn bản thông điệp của mình. Bạn cũng có thể trả về cho tập lệnh câu trả lời của người dùng (Yes/No).

$Output = $wshell.Popup("The report generation script is successfully completed! Do you want to display a report on the screen?",0,"The report is ready",4+32)
Cú pháp chung và các tham số có sẵn của phương thức Popup:
Popup(<Text>,<SecondsToWait>,<Title>,<Type>)
Tham số:
- <
Text> — văn bản thông điệp (chuỗi); - <
SecondsToWait> — một số (tùy chọn). Số giây sau đó cửa sổ thông điệp sẽ tự động đóng; - <
Title> — chuỗi (tùy chọn). Văn bản tiêu đề (caption) của cửa sổ pop-up; - <
Type> — số (tùy chọn). Kết hợp các cờ xác định loại nút và biểu tượng.
Các giá trị cờ Type có thể:
-
- 0 — nút OK;
- 1 — nút OK và Cancel;
- 2 — nút Stop, Retry và Skip;
- 3 — nút Yes, No và Cancel;
- 4 — nút Yes và No;
- 5 — nút Retry và Cancel;
- 16 — biểu tượng Stop;
- 32 — biểu tượng Question;
- 48 — biểu tượng Exclamation;
- 64 — biểu tượng Information.
Phương thức Popup trả về một số nguyên cho phép biết nút nào được nhấp bởi người dùng. Giá trị có thể:
- -1 — timeout;
- 1 — nút OK;
- 2 — nút Cancel;
- 3 — nút Stop;
- 4 — nút Retry;
- 5 — nút Skip;
- 6 — nút Yes;
- 7 — nút No.
Thông báo pop-up đẹp mắt hơn (balloon tips) có thể được hiển thị trong Windows 7, 8.1 & 10 thông qua Windows Forms API. Mã PowerShell sau sẽ hiển thị thông báo pop-up bên cạnh thanh thông báo Windows 10 sẽ tự động biến mất sau 20 giây.
Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = ‘This is the pop-up message text for the Windows 10 user'
$balmsg.BalloonTipTitle = "Attention $Env:USERNAME"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(20000)

Để tạo thông báo pop-up nhiều màu sắc trong Windows 10 (PowerShell 5.0+), bạn cũng có thể sử dụng mô-đun PowerShell riêng biệt BurntToast từ PowerShell gallery.
Mô-đun được cài đặt từ kho trực tuyến bằng Trình quản lý gói Windows 10:
Install-Module -Name BurntToast
Ví dụ, bây giờ bạn có thể dễ dàng thêm thông báo nhiều màu sắc vào tập lệnh từ bài viết "Cách tự động tắt Wi-Fi khi cáp Ethernet được kết nối":
New-BurntToastNotification -Text "Disconnecting from Wi-Fi network", "You have been disconnected from your Wi-Fi network since your device was connected to a high-speed Ethernet LAN" -AppLogo C:\PS\changenetwork.png
Do đó, bạn biết cách hiển thị thông báo cho người dùng bằng PowerShell. Nếu người dùng có loa, bạn thậm chí có thể phát giai điệu yêu thích:
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(659,500)
[console]::beep(698,350)
[console]::beep(523,150)
[console]::beep(415,500)
[console]::beep(349,350)
[console]::beep(523,150)
[console]::beep(440,1000)
[console]::beep(880,500)
[console]::beep(440,350)
[console]::beep(440,150)
[console]::beep(880,500)
[console]::beep(830,250)
[console]::beep(784,250)
[console]::beep(740,125)
[console]::beep(698,125)
[console]::beep(740,250)
[console]::beep(455,250)
[console]::beep(622,500)
[console]::beep(587,250)
[console]::beep(554,250)
[console]::beep(523,125)
[console]::beep(466,125)
[console]::beep(523,250)
[console]::beep(349,125)
[console]::beep(415,500)
[console]::beep(349,375)
[console]::beep(440,125)
[console]::beep(523,500)
[console]::beep(440,375)
[console]::beep(523,125)
[console]::beep(659,1000)
[console]::beep(880,500)
[console]::beep(440,350)
[console]::beep(440,150)
[console]::beep(880,500)
[console]::beep(830,250)
[console]::beep(784,250)
[console]::beep(740,125)
[console]::beep(698,125)
[console]::beep(740,250)
[console]::beep(455,250)
[console]::beep(622,500)
[console]::beep(587,250)
[console]::beep(554,250)
[console]::beep(523,125)
[console]::beep(466,125)
[console]::beep(523,250)
[console]::beep(349,250)
[console]::beep(415,500)
[console]::beep(349,375)
[console]::beep(523,125)
[console]::beep(440,500)
[console]::beep(349,375)
[console]::beep(261,125)
[console]::beep(440,1000)