Wyświetlaj powiadomienia użytkownikom korzystającym z PowerShell

Pomimo faktu, że PowerShell jest językiem konsoli, czasem konieczne jest powiadomienie użytkownika o określonym zdarzeniu lub konieczności wykonania określonej akcji ze skryptu PowerShell. Na przykład wyświetl powiadomienie o zakończeniu jakiegoś długo działającego skryptu PoSh lub o wystąpieniu jakiegoś ważnego zdarzenia.

Najprostszym sposobem wyświetlenia okna z dowolnym testem za pomocą podsystemu skryptów Windows - Wscript.

Poniższy kod wyświetli zwykłe pole tekstowe z niezbędnym tekstem i przyciskiem OK.

$ wshell = New-Object -ComObject Wscript.Shell
$ Output = $ wshell.Popup („Skrypt generowania raportu zakończony”)

Korzystając z różnych właściwości metody Popup, możesz dostosować wygląd modalnego okna komunikatu. W szczególności możesz wrócić do skryptu wyniki odpowiedzi użytkownika na pytanie (Tak / Nie).

$ Output = $ wshell.Popup („Skrypt do generowania raportu jest gotowy! Czy chcesz go wyświetlić na ekranie?”, 0, „Raport jest gotowy”, 4 + 32)

Ogólna składnia i parametry metody Popup:

Popup (,,,)

Parametry:

  • - ciąg, tekst wiadomości.
  • - opcjonalnie, numer. Liczba sekund, po których okno zostanie automatycznie zamknięte.
  • - opcjonalnie, ciąg. Tekst tytułu okna wiadomości.
  • - opcjonalnie, numer. Kombinacja flag określa typ przycisków i ikony. Możliwe wartości flag:
    • 0 - przycisk OK.
    • 1 - Przyciski OK i Anuluj.
    • 2 - Przyciski Stop, Powtórz, Pomiń.
    • 3 - Przyciski Tak, Nie, Anuluj.
    • 4 - Przyciski Tak i Brak.
    • 5 - Przyciski powtarzania i anulowania.
    • 16 - Ikona zatrzymania.
    • 32 - Ikona pytania.
    • 48 - Ikona wykrzyknika.
    • 64 - Ikona informacji.

Opis: zwraca wartość całkowitą, za pomocą której można dowiedzieć się, który przycisk został naciśnięty przez użytkownika. Możliwe wartości:

  • -1 - limit czasu.
  • 1 - przycisk OK.
  • 2 - Przycisk Anuluj.
  • 3 - przycisk Stop.
  • 4 - Przycisk powtarzania.
  • 5 - Przycisk pomijania.
  • 6 - Przycisk Tak.
  • 7 - Brak przycisku.

Bardziej atrakcyjne i przyjemnie wyglądające wyskakujące komunikaty (dymki) można wyświetlać w Windows 7, 8.1 i 10 za pomocą Windows Forms API. Poniższy kod programu PowerShell wyświetli komunikat wyskakujący obok panelu powiadomień systemu Windows 10, który automatycznie zniknie po 10 sekundach.

Add-Type -AssemblyName System.Windows.Forms
$ global: balmsg = New-Object System.Windows.Forms.NotifyIcon
$ path = (Get-Process -id $ pid). Ścieżka
$ balmsg.Icon = [System.Drawing.Icon] :: ExtractAssociatedIcon ($ path)
$ balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon] :: Ostrzeżenie
$ balmsg.BalloonTipText = 'To jest tekst wyskakującego komunikatu dla użytkownika systemu Windows 10'
$ balmsg.BalloonTipTitle = "Ostrzeżenie $ Env: USERNAME"
$ balmsg.Visible = $ true
$ balmsg.ShowBalloonTip (10000)

Ponadto do tworzenia kolorowych wyskakujących wiadomości w systemie Windows 10 (PowerShell 5.0+) można użyć osobnego modułu PowerShell BurntToast z galerii PowerShell.

Moduł jest instalowany z repozytorium online za pomocą menedżera pakietów Windows 10:
Install-Module -Name BurntToast

Teraz, na przykład, we wcześniej rozważanym skrypcie, aby automatycznie rozłączać się z siecią Wi-FI po podłączeniu do sieci Ethernet, możesz dodać kolorowe powiadomienie:

New-BurntToastNotification -Text „Rozłączanie z siecią Wi-Fi”, „Zostałeś odłączony od sieci Wi-Fi, ponieważ Twoje urządzenie było podłączone do szybkiego łącza Ethernet”. -AppLogo C: \ PS \ changenetwork.png

Teraz wiesz, jak wyświetlić powiadomienie użytkownika za pomocą programu PowerShell. Jeśli użytkownik ma głośniki, możesz nawet odtworzyć mu melodię:

[konsola] :: beep (440,500)
[konsola] :: beep (440,500)
[konsola] :: beep (440,500)
[konsola] :: beep (349,350)
[konsola] :: beep (523,150)
[konsola] :: beep (440,500)
[konsola] :: beep (349,350)
[konsola] :: beep (523,150)
[konsola] :: beep (440,1000)
[konsola] :: beep (659,500)
[konsola] :: beep (659,500)
[konsola] :: beep (659,500)
[konsola] :: beep (698,350)
[konsola] :: beep (523,150)
[konsola] :: beep (415,500)
[konsola] :: beep (349,350)
[konsola] :: beep (523,150)
[konsola] :: beep (440,1000)
[konsola] :: beep (880,500)
[konsola] :: beep (440,350)
[konsola] :: beep (440,150)
[konsola] :: beep (880,500)
[konsola] :: beep (830,250)
[konsola] :: beep (784,250)
[konsola] :: beep (740,125)
[konsola] :: beep (698,125)
[konsola] :: beep (740,250)
[konsola] :: beep (455,250)
[konsola] :: beep (622 500)
[konsola] :: beep (587,250)
[konsola] :: beep (554,250)
[konsola] :: beep (523,125)
[konsola] :: beep (466,125)
[konsola] :: beep (523,250)
[konsola] :: beep (349,125)
[konsola] :: beep (415,500)
[konsola] :: beep (349,375)
[konsola] :: beep (440,125)
[konsola] :: beep (523 500)
[konsola] :: beep (440,375)
[konsola] :: beep (523,125)
[konsola] :: beep (659,1000)
[konsola] :: beep (880,500)
[konsola] :: beep (440,350)
[konsola] :: beep (440,150)
[konsola] :: beep (880,500)
[konsola] :: beep (830,250)
[konsola] :: beep (784,250)
[konsola] :: beep (740,125)
[konsola] :: beep (698,125)
[konsola] :: beep (740,250)
[konsola] :: beep (455,250)
[konsola] :: beep (622 500)
[konsola] :: beep (587,250)
[konsola] :: beep (554,250)
[konsola] :: beep (523,125)
[konsola] :: beep (466,125)
[konsola] :: beep (523,250)
[konsola] :: beep (349,250)
[konsola] :: beep (415,500)
[konsola] :: beep (349,375)
[konsola] :: beep (523,125)
[konsola] :: beep (440,500)
[konsola] :: beep (349,375)
[konsola] :: beep (261,125)
[konsola] :: beep (440,1000)