Вы можете использовать PowerShell для отображения всплывающих или тостовых сообщений, чтобы уведомить пользователей Windows о важных событиях. Чтобы получить информацию от пользователя или подтвердить действие, вы можете использовать PowerShell для отображения тостовых (всплывающих) уведомлений или модальных диалоговых окон.
Отображение всплывающего сообщения с помощью PowerShell
Если вам нужно вывести на рабочий стол простое модальное диалоговое окно, вы можете воспользоваться командой Wscript класс. Чтобы отобразить всплывающее окно с текстом сообщения и кнопкой OK, используйте следующий код PowerShell:
$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("The report generation script is successfully completed!")
Использование различных свойств Всплывающее окно метод, вы можете настроить внешний вид этого модального окна и добавить в него кнопки действий. Например, чтобы отобразить всплывающую подсказку с Да и Нет кнопки, бежать:
$Output = $wshell.Popup("The script completed successfully. Do you want to view a report?",0,"The report is ready",4+32)
Если пользователь нажимает «Да», команда возвращается 6, а если «Нет», то возвращается 7. В зависимости от выбора пользователя можно запустить действие или выйти из сценария.
switch ($Output) { 7 {$wshell.Popup('Pressed No')} 6 {$wshell.Popup('Pressed Yes')} default {$wshell.Popup('Invalid input')} }
Общий синтаксис и доступные параметры метода Popup:
Popup(<Text>,<SecondsToWait>,<Title>,<Type>)
Параметры:
- <
Text
> — текст сообщения (строка); - <
SecondsToWait
> -a Число (необязательно). Количество секунд до автоматического закрытия окна сообщения; - <
Title
> -string (необязательно). Текст заголовка (надписи) всплывающего окна; - <
Type
> -number (необязательно). Комбинация флагов, определяющих тип кнопок и значков.
Возможные значения для Тип флаг:
- 0 — только кнопка OK;
- 1 — OK и Отмена;
- 2 — Стоп, Повтор и Пропуск;
- 3 — Да, Нет и Отмена;
- 4 — Да и Нет;
- 5 — Повторная попытка и Отмена;
- 16 — значок остановки;
- 32 — значок вопроса;
- 48 — Восклицательный значок;
- 64 — значок информации.
Метод Popup возвращает целочисленное значение, которое позволяет узнать, какую кнопку нажал пользователь. Возможные значения:
- -1 — таймаут;
- 1 — кнопка OK;
- 2 — кнопка «Отмена»;
- 3 — кнопка «Стоп»;
- 4 — кнопка повтора;
- 5 — кнопка «Пропустить»;
- 6 — кнопка «Да»;
- 7 — кнопка «Нет».
Используйте класс Windows Forms, когда вам нужно запросить у пользователя информацию.
Add-Type -AssemblyName System.Windows.Forms
$input = [Microsoft.VisualBasic.Interaction]::InputBox("Enter your username:", " Require user input", "")
Для обработки пользовательского ввода:
if ([string]::IsNullOrWhiteSpace($input)) { Write-Host " No information provided" } else { Write-Host " You have entered $input" }
Если вы хотите отобразить модальный диалог поверх всех окон на рабочем столе:
($ModalTop = New-Object 'System.Windows.Forms.Form').TopMost = $True
[System.Windows.Forms.MessageBox]::Show($ModalTop,"Your text", " Your Caption", 4, 48)
Отправка тостового уведомления из сценария PowerShell
Используйте класс Windows Forms для отображения более привлекательных тостовых (шариковых) уведомлений. Следующий код PowerShell отображает всплывающее сообщение рядом с панелью уведомлений Windows, которое исчезает через 20 секунд.
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 a pop-up message text for the Windows user'
$balmsg.BalloonTipTitle = "Attention $Env:USERNAME"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(20000)
Для создания всплывающих уведомлений PowerShell в Windows можно использовать стороннюю программу BurntToast модуль из галереи PowerShell. Установите модуль:
Install-Module -Name BurntToast
Например, теперь вы можете легко добавить красочное уведомление в сценарий из поста «Как автоматически отключить Wi-Fi при подключении Ethernet-кабеля»:
New-BurntToastNotification -Text " Wi-Fi network disconnection", " Since your device was connected to a high-speed Ethernet LAN, you have been disconnected from your Wi-Fi network" -AppLogo C:\PS\changenetwork.png
Показ всплывающего сообщения на удаленном компьютере с помощью PowerShell
Вы можете использовать PowerShell для отправки тостового сообщения пользователю на удаленном компьютере. Сначала перечислите сеансы пользователей на удаленном компьютере (в случае RDS-сервера):
qwinsta /server:Mun-RDS1
Чтобы отправить всплывающее сообщение определенному сеансу пользователя на удаленном компьютере:
MSG jsmith /server:Mun-RDS1 "Please restart the SUPGUI client in 5 minutes!”
Если вы хотите отправить всплывающее сообщение всем пользователям, используйте * вместо имени пользователя:
MSG * /server:Mun-RDS1 " The server will be restarted in 10 minutes. Save your files and open documents!"
Чтобы отправить всплывающее графическое уведомление на удаленный компьютер, вы можете использовать команду RemoteSendToasNotification.ps1 скрипт из нашего репозитория на GitHub ( https://github.com/maxbakhub/winposh/blob/main/WindowsDesktopManagement/RemoteSendToasNotification.ps1). Команда Invoke-Command, которая используется для установки соединения, требует, чтобы WinRM был включен и настроен на удаленном компьютере.