Edited August 5, 2023 by Zanku
Для оповещения пользователей о различных событиях, вы можете выводить различные графические уведомления из скриптов PowerShell. В PowerShell можно использовать всплывающие уведомления в трее Windows или модальные окно для получения информации от пользователя или подтверждения действия.
Время на прочтение
Microsoft готовит к выпуску обновление для PowerToys, набора утилит для Windows 10 и 11. В версии 0.77 появится новый инструмент Command Not Found с возможностью использования PowerShell.
Утилита Command Not Found предупредит пользователя об отсутствующем компоненте и предложит установить его с помощью PowerShell. Например, выполнение команды code приведёт к тому, что PowerShell предложит установить Visual Studio Code, если приложение недоступно. В отличие от других утилит, Command Not Found по умолчанию отключена. Для её включения потребуется установка PowerShell 7.4.
В числе дополнительных нововведений в PowerToys 0.77 добавлена возможность смены языка, поддержка большего количества математических символов для Quick Accent и улучшенный пользовательский интерфейс выбора цвета.
Microsoft также работает над улучшенными уведомлениями о доступных новых версиях. Сейчас баннер «Доступно обновление» в PowerToys появляется без кнопки установки, из-за чего неопытным пользователям не всегда очевиден способ перехода к последней версии. В будущем обновлении PowerToys кнопка установки появится на странице информационной панели и во всплывающем меню. Это изменение, по информации Neowin, будет доступно в версии 0.78.
В начале декабря 2023 года вышла версия PowerToys 0.76. В предыдущем выпуске разработчики сосредоточились на новых функциях, стабильности, исправлении ошибок, улучшениях кода проекта, а также перешли на .NET 8. В PowerToys 0.76 появились новые надстройки для проводника, модернизированы PowerToys Run, Quick Accent и пользовательский интерфейс Text Extractor. Туда добавлены визуальные эффекты, используемые в Windows 11.
Разработчики пояснили, что в PowerToys v0.76 диспетчеру клавиатуры разрешено выводить произвольные последовательности в Unicode, WebView 2 обновлён до 1.0.2088.41, доработаны связки с WinUI3, WPF-UI поддерживает сборки preview.9 и preview.11, а WinAppSDK обновлена до 1.4.3.
Информация о файле
Описание
Размер файла:
420 kB
Дата и время изменения файла:
2017:03:18 18:20:18+00:00
Дата и время изменения индексного дескриптора файлов:
2017:11:05 07:07:54+00:00
Тип файла:
Win32 EXE
Предупреждение!
Possibly corrupt Version resource
Тип компьютера:
Intel 386 or later, and compatibles
Метка времени:
2084:06:07 13:50:38+00:00
Размер инициализированных данных:
370688
Размер неинициализированных данных:
0
Подсистема:
Windows command line
Номер версии файла:
10.0.15063.0
Номер версии продукта:
10.0.15063.0
Маска флагов файлов:
0x003f
Файловая ОС:
Windows NT 32-bit
Тип объектного файла:
Executable application
Код языка:
English (U.S.)
Наименование компании:
Microsoft Corporation
Описание файла:
Windows PowerShell
Версия файла:
10.0.15063.0 (WinBuild.160101.0800)
Оригинальное имя файла:
PowerShell.EXE
Название продукта:
Microsoft® Windows® Operating System
✻ Фрагменты данных файлов предоставлены участником Exiftool (Phil Harvey) и распространяются под лицензией Perl Artistic.
Вывести уведомление пользователю Windows из скрипта PowerShell
С помощью класса Windows Forms можно вывести более красивые всплывающие сообщения (ballons). Следующий скрипт выведет всплывающее сообщение рядом с панелью уведомлений Windows, которое автоматически исчезнет через 10 секунд:
Для создания красочных всплывающих сообщений в Windows можно использовать отдельный PowerShell модуль BurntToast.
Установите модуля из PowerShell Gallery:
Install-Module -Name BurntToast
Теперь, например, в ранее рассматриваемый скрипт автоматического отключения от Wi-FI сети при подключении к Ethernet можно добавить уведомление с картинкой:
New-BurntToastNotification -Text “Отключение от Wi-Fi сети”, “Вы были отключены от Wi-Fi сети, т.к. Вше устройство было подключено к скоростному Ethernet подключению.” -AppLogo C:PSchangenetwork.png
Отправка сообщения пользователю на удаленный компьютер
С помощью PowerShell вы можете отправить всплывающее сообщение пользователю на удаленный компьютер. Сначала нужно получить список сессии пользователей на удаленном компьютере (в случае RDS сервера):
Чтобы отправить сообщение в сессию пользователя на удаленном компьютер, выполните команду:
MSG kbuldogov /server:rds1 “Сервер будет перезагружен через 10 минут. Закройте документы”
Если всплывающее сообщение нужно отправить всем пользователям укажите * вместо имени пользователя:
MSG * /server:rds1 “Срочное сообщение всем! “
Для отправки всплывающего графического уведомления на удаленный компьютер можно воспользоваться скриптом RemoteSendToasNotification.ps1 из нашего GitHub репозитория ( https://github.com/winadm/posh/blob/master/scripts/RemoteSendToasNotification.ps1). Для подключения к удаленному компьютеру используется командлет Invoke-Command, который использует WinRM.
Вывести всплывающее сообщение на экран с помощью PowerShell
Для вывода простых модального диалогового окна в Windows можно воспользоваться Wscript классами подсистемы сценариев Windows. Следующий PowerShell код выведет обычное текстовое окно с вашим текстом и кнопкой OK.
$wshell = New-Object -ComObject Wscript.Shell$Output = $wshell.Popup(“Скрипт формирования отчета выполнен”)
Вы можете настроить вид модального окна такого сообщения и добавить кнопки действия для пользователей. Например, чтобы вывести всплывающее окно с кнопками Да и Нет, выполните:
$Output = $wshell.Popup(“Скрипт формирования отчета завершен! Хотите вывести его на экран?”,0,”Отчет готов”,4+32)
Если пользователь нажмет Да, команда вернет значение
6
, а если Нет –
7
.
В зависимости от выбора пользователя вы можете выполнить какое-то действие, или завершить скрипт.
Общий синтаксис и параметры метода Popup:
Команда PowerShell возвращает целое значение, с помощью которого можно узнать, какая кнопка была нажата пользователем. Возможные значения:
Если нужно показать пользователю окно ввода и запросить данные, воспользуйтесь классом Windows Forms.
Чтобы обработать введенные пользователе данные: