Незважаючи на те, що PowerShell консольний мову, іноді необхідно з скрипта PowerShell оповістити користувача про певну подію або необхідності виконати певну дію. Наприклад, вивести повідомлення про завершення будь-якого тривалого PoSh скрипта, або про настання якогось важливого події.
Найпростіший спосіб вивести віконце з довільним тестом через підсистему сценаріїв Windows - Wscript.
Наступний код виведе звичайне текстове вікно з необхідним текстом і кнопкою OK.
$ Wshell = New-Object -ComObject Wscript.Shell
$ Output = $ wshell.Popup ( "Скрипт формування звіту виконаний")
За допомогою різних властивостей методу Popup ви можете налаштувати вигляд модального вікна повідомлення. У тому числі можна повернути в скрипт результати відповіді користувача на питання (Так / Ні).
$ Output = $ wshell.Popup ( "Скрипт формування звіту завершено! Хочете вивести його на екран?", 0, "Звіт готовий", 4 + 32)
Загальний синтаксис і параметри методу Popup:
Popup (,,,)
параметри:
- - рядок, текст повідомлення.
- - необов'язковий, число. Кількість секунд, після закінчення якого вікно буде автоматично закрито.
- - необов'язковий, рядок. Текст заголовка вікна повідомлення.
- - необов'язковий, число. Комбінація прапорів, визначає тип кнопок і значка. Можливі значення прапорів:
- 0 - кнопка ОК.
- 1 - кнопки ОК і Скасування.
- 2 - кнопки Стоп, Повтор, Пропустити.
- 3 - кнопки Так, Ні, Скасування.
- 4 - кнопки Та й Ні.
- 5 - кнопки Повтор і Скасування.
- 16 - значок Stop.
- 32 - значок Question.
- 48 - значок Exclamation.
- 64 - значок Information.
Опис: повертає ціле значення, за допомогою якого можна дізнатися, яка кнопка була натиснута користувачем. Можливі значення:
- -1 - таймаут.
- 1 - кнопка ОК.
- 2 - кнопка Скасування.
- 3 - кнопка Стоп.
- 4 - кнопка Повтор.
- 5 - кнопка Пропустити.
- 6 - кнопка Так.
- 7 - кнопка Ні.
Більш привабливі і приємні погляду спливаючі повідомлення (ballons) можна вивести в Windows 7, 8.1 і 10 через API Windows Forms. Наступний PowerShell код виведе спливаюче повідомлення поруч з панеллю повідомлень Windows 10, яке автоматично зникне через 10 секунд.
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 = 'Це текст спливаючого повідомлення для користувача Windows 10'
$ Balmsg.BalloonTipTitle = "Увага $ Env: USERNAME"
$ Balmsg.Visible = $ true
$ Balmsg.ShowBalloonTip (10000)
Крім того для створення барвистих спливаючих повідомлень в Windows 10 (PowerShell 5.0) можна використовувати окремий PowerShell модуль BurntToast з галереї PowerShell.
Модуль встановлюється з онлайн сховища за допомогою менеджера пакетів Windows 10:Install-Module -Name BurntToast
Тепер, наприклад, в раніше розглянутий скрипт автоматичного відключення від Wi-FI мережі при підключенні до Ethernet можна додати барвисте повідомлення:
New-BurntToastNotification -Text "Відключення від Wi-Fi мережі", "Ви були відключені від Wi-Fi мережі, тому що ВШЕ пристрій було підключено до швидкісного Ethernet підключення." -AppLogo C: \ PS \ changenetwork.png
Отже, тепер ви знаєте як вивести повідомлення користувача через PowerShell. Якщо у користувача є динаміки, можна навіть зіграти йому мелодію:
[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)