Руководство по обходу политики выполнения power shell

Для оповещения пользователей о различных событиях, вы можете выводить различные графические уведомления из скриптов PowerShell. В PowerShell можно использовать всплывающие уведомления в трее Windows или модальные окно для получения информации от пользователя или подтверждения действия.

Вывести всплывающее сообщение на экран с помощью PowerShell

Для вывода простых модального диалогового окна в Windows можно воспользоваться Wscript классами подсистемы сценариев Windows. Следующий PowerShell код выведет обычное текстовое окно с вашим текстом и кнопкой OK.

$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("Скрипт формирования отчета выполнен")

Wscript.Shell вывод уведомлений в POwershell

Вы можете настроить вид модального окна такого сообщения и добавить кнопки действия для пользователей. Например, чтобы вывести всплывающее окно с кнопками Да и Нет, выполните:

$wshell.Popup

$Output = $wshell.Popup("Скрипт формирования отчета завершен! Хотите вывести его на экран?",0,"Отчет готов",4+32)

Если пользователь нажмет Да, команда вернет значение
6
, а если Нет –
7
.

В зависимости от выбора пользователя вы можете выполнить какое-то действие, или завершить скрипт.

switch ($Output) { 7 {$wshell.Popup('Нажата Нет')} 6 {$wshell.Popup('Нажата Да')}  

default {$wshell.Popup('Неверный ввод')} } 

Общий синтаксис и параметры метода Popup:

  • <Text> — текст сообщения.
  • <SecondsToWait> — необязательный, число. Количество секунд, по истечении которого окно будет автоматически закрыто.
  • <Title> — текст заголовка окна сообщения (необязательный параметр).
  • <Type> — комбинация флагов, определяет тип кнопок и вид значка (числовое значение, не обязательный параметр). Возможные значения флагов:
    • 0 — кнопка ОК.
    • 1 — кнопки ОК и Отмена.
    • 2 — кнопки Стоп, Повтор, Пропустить.
    • 3 — кнопки Да, Нет, Отмена.
    • 4 — кнопки Да и Нет.
    • 5 — кнопки Повтор и Отмена.
    • 16 — значок Stop.
    • 32 — значок Question.
    • 48 — значок Exclamation.
    • 64 — значок Information.

Команда PowerShell возвращает целое значение, с помощью которого можно узнать, какая кнопка была нажата пользователем. Возможные значения:

  • -1 — таймаут.
  • 1 — кнопка ОК.
  • 2 — кнопка Отмена.
  • 3 — кнопка Стоп.
  • 4 — кнопка Повтор.
  • 5 — кнопка Пропустить.
  • 6 — кнопка Да.
  • 7 — кнопка Нет.
:/>  Как узнать серийный номер ноутбука - подробная информация

Если нужно показать пользователю окно ввода и запросить данные, воспользуйтесь классом Windows Forms.

Чтобы обработать введенные пользователе данные:

if ([string]::IsNullOrWhiteSpace($input)) {
  Write-Host "Данные не указаны"
} else {
    Write-Host "Вы ввели $input"
}

Вывести окно для ввода данных пользователя в powershell скрипте

Если нужно вывести всплывающее окно поверх всех окон, используйте команду:

Вывести уведомление пользователю Windows из скрипта PowerShell

С помощью класса Windows Forms можно вывести более красивые всплывающие сообщения (ballons). Следующий скрипт выведет всплывающее сообщение рядом с панелью уведомлений Windows, которое автоматически исчезнет через 10 секунд:

всплывающее уведомление в POwerShell

Для создания красочных всплывающих сообщений в Windows можно использовать отдельный PowerShell модуль BurntToast.

Установите модуля из PowerShell Gallery:

Install-Module -Name BurntToast

Теперь, например, в ранее рассматриваемый скрипт автоматического отключения от Wi-FI сети при подключении к Ethernet можно добавить уведомление с картинкой:

New-BurntToastNotification -Text "Отключение от Wi-Fi сети", "Вы были отключены от Wi-Fi сети, т.к. Вше устройство было подключено к скоростному Ethernet подключению." -AppLogo C:\PS\changenetwork.png

Вывести всплывающее уведомление uvedomlenie New-BurntToastNotification

Отправка сообщения пользователю на удаленный компьютер

С помощью PowerShell вы можете отправить всплывающее сообщение пользователю на удаленный компьютер. Сначала нужно получить список сессии пользователей на удаленном компьютере (в случае RDS сервера):

qwinsta: список сессий пользователей на удаленном компьютере

Чтобы отправить сообщение в сессию пользователя на удаленном компьютер, выполните команду:

MSG kbuldogov /server:rds1 "Сервер будет перезагружен через 10 минут. Закройте документы"

Если всплывающее сообщение нужно отправить всем пользователям укажите * вместо имени пользователя:

MSG * /server:rds1 "Срочное сообщение всем! "

PowerShell msg вывести сообщение пользователю на удаленном компьютере

Для отправки всплывающего графического уведомления на удаленный компьютер можно воспользоваться скриптом RemoteSendToasNotification.ps1 из нашего GitHub репозитория ( https://github.com/winadm/posh/blob/master/scripts/RemoteSendToasNotification.ps1). Для подключения к удаленному компьютеру используется командлет Invoke-Command, который использует WinRM.

Отправить всплывающее сообщение пользователю на удаленный компьютер Windows

Оставьте комментарий