Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

PowerShell에서 팝업 및 풍선 도움말 알림 표시하는 방법

PowerShell 스크립트에서 사용자에게 알림 표시하기

PowerShell은 기본적으로 콘솔 기반 언어지만, 때로는 PS 스크립트에서 특정 이벤트를 사용자에게 알리거나 사용자의 조치를 요청해야 할 때가 있습니다. 예를 들어 오래 실행되는 PowerShell 스크립트의 작업 완료 여부나 중요한 이벤트 발생 시점에 팝업 창 또는 풍선 도움말(balloon tip) 형태의 알림을 화면에 표시할 수 있습니다.

Wscript.Shell을 이용한 팝업 창 표시

가장 간단한 방법은 PowerShell에서 Windows Script Host(Wscript)를 호출하여 원하는 텍스트가 담긴 창을 띄우는 것입니다.

아래 PowerShell 코드를 실행하면 지정한 메시지와 확인(OK) 버튼이 포함된 일반적인 대화 상자가 나타납니다.

$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("보고서 생성 스크립트가 성공적으로 완료되었습니다!")

Popup 메서드의 다양한 속성을 활용하면 메시지가 담긴 모달 창의 모양을 자유롭게 꾸밀 수 있으며, 사용자의 응답(예/아니요) 값을 스크립트로 되돌려받을 수도 있습니다.

$Output = $wshell.Popup("보고서 생성 스크립트가 성공적으로 완료되었습니다! 화면에 보고서를 표시하시겠습니까?",0,"보고서 준비 완료",4+32)

Popup 메서드 구문 및 매개변수

Popup(<Text>,<SecondsToWait>,<Title>,<Type>)
  • <Text> — 표시할 메시지 본문(문자열)
  • <SecondsToWait> — 선택 사항(숫자). 지정한 초가 지나면 메시지 창이 자동으로 닫힙니다.
  • <Title> — 선택 사항(문자열). 팝업 창의 제목 텍스트입니다.
  • <Type> — 선택 사항(숫자). 버튼과 아이콘 종류를 결정하는 플래그 조합입니다.

Type 플래그 값

  • 0 — 확인(OK) 버튼
  • 1 — 확인(OK) 및 취소(Cancel) 버튼
  • 2 — 중단(Abort), 다시 시도(Retry), 무시(Ignore) 버튼
  • 3 — 예(Yes), 아니요(No), 취소(Cancel) 버튼
  • 4 — 예(Yes), 아니요(No) 버튼
  • 5 — 다시 시도(Retry), 취소(Cancel) 버튼
  • 16 — 중지(Stop) 아이콘
  • 32 — 물음표(Question) 아이콘
  • 48 — 느낌표(Exclamation) 아이콘
  • 64 — 정보(Information) 아이콘

Popup 메서드의 반환값

Popup 메서드는 정수를 반환하므로, 이 값을 통해 사용자가 어떤 버튼을 클릭했는지 알 수 있습니다. 가능한 반환값은 다음과 같습니다.

  • -1 — 제한 시간 초과(자동 종료)
  • 1 — 확인(OK) 버튼
  • 2 — 취소(Cancel) 버튼
  • 3 — 중단(Abort) 버튼
  • 4 — 다시 시도(Retry) 버튼
  • 5 — 무시(Ignore) 버튼
  • 6 — 예(Yes) 버튼
  • 7 — 아니요(No) 버튼

Windows Forms API로 풍선 도움말(Balloon Tip) 표시

좀 더 세련된 팝업 메시지(풍선 도움말)는 Windows Forms API를 통해 표시할 수 있습니다. 아래 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 = 'Windows 10 사용자를 위한 팝업 메시지입니다'
$balmsg.BalloonTipTitle = "주의: $Env:USERNAME"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(20000)

BurntToast 모듈로 알림 센터 스타일 알림 만들기

Windows 10(PowerShell 5.0 이상) 환경에서 더욱 다채로운 알림을 만들고 싶다면 PowerShell 갤러리에서 제공하는 별도 모듈인 BurntToast를 사용할 수 있습니다.

모듈은 Windows 패키지 관리자(PowerShellGet)를 통해 온라인 리포지토리에서 간편하게 설치할 수 있습니다.

Install-Module -Name BurntToast

예를 들어 "이더넷 케이블 연결 시 Wi-Fi 자동 비활성화"와 같은 스크립트에는 다음 한 줄만 추가하면 알림을 손쉽게 넣을 수 있습니다.

New-BurntToastNotification -Text "Wi-Fi 네트워크 연결 해제", "기기가 고속 유선 이더넷 LAN에 연결되어 Wi-Fi 네트워크에서 연결이 해제되었습니다" -AppLogo C:\PS\changenetwork.png

소리로 알림 주기: [console]::beep

지금까지 PowerShell로 사용자에게 알림을 표시하는 다양한 방법을 살펴보았습니다. 사용자 PC에 스피커가 있다면 아래처럼 [console]::beep을 활용해 베토벤의 '환희의 송' 같은 간단한 멜로디까지 재생할 수 있습니다.

[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)