如何显示来自PowerShell的弹出窗口或者气球提示通知?

时间:2020-01-09 10:46:45  来源:igfitidea点击:

尽管PowerShell是一种控制台语言,但有时还是有必要从PS脚本中通知用户有关特定事件的信息,或者提示他们执行某些操作。例如,我们可以显示有关重型PoSh脚本已完成或者发生重要事件的弹出通知或者气球提示。

最简单的方法是使用PowerShell的Windows脚本子系统(Wscript)调用来显示包含任何文本的窗口。

此PowerShell代码将显示一个带有消息和"确定"按钮的公共窗口。

$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("The report generation script is successfully completed!")

使用Popup方法的不同属性,我们可以自定义包含消息文本的模态窗口的外观。我们还可以返回用户回答的脚本(是/否)。

$Output = $wshell.Popup("The report generation script is successfully completed! Do you want to display a report on the screen?",0,"The report is ready",4+32)

Popup方法的常规语法和可用参数:

Popup(<Text>,<SecondsToWait>,<Title>,<Type>)

参数:

  • Text 消息文本(字符串);
  • SecondsToWait 一个数字(可选)。消息窗口将自动关闭的秒数;
  • Title 字符串(可选)。弹出窗口的标题文本(标题);
  • Type 数字(可选)。确定按钮和图标类型的标志的组合。

可能的类型标志值:

  • 0 OK按钮;
  • 1个确定和取消按钮;
  • 2个"停止","重试"和"跳过"按钮;
  • 3是,否和取消按钮;
  • 4是和否按钮;
  • 5重试和取消按钮;
  • 16停止图标;
  • 32问题图标;
  • 48感叹号图标;
  • 64信息图标。

" Popup"方法返回一个整数,该整数允许我们知道用户单击了哪个按钮。可能的值:

  • -1超时;
  • 1个OK按钮;
  • 2取消按钮;
  • 3停止按钮;
  • 4重试按钮;
  • 5跳过按钮;
  • 6是按钮;
  • 7没有按钮。

通过Windows Forms API,可能会在Windows 7、8.1和10中显示更吸引人的弹出消息(气球提示)。以下PowerShell代码将在Windows 10通知栏旁边显示弹出消息,该消息将在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 = ‘This is the pop-up message text for the Windows 10 user'
$balmsg.BalloonTipTitle = "Attention $Env:USERNAME"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(20000)

要在Windows 10(PowerShell 5.0+)中创建彩色弹出消息,我们还可以使用PowerShell画廊中单独的PowerShell模块" BurntToast"。

该模块是使用Windows 10软件包管理器从联机存储库安装的:

Install-Module -Name BurntToast

例如,现在我们可以轻松地从文章如何在连接以太网电缆时自动禁用Wi-Fi上的脚本中添加彩色通知:

New-BurntToastNotification -Text "Disconnecting from Wi-Fi network", "You have been disconnected from your Wi-Fi network since your device was connected to a high-speed Ethernet LAN" -AppLogo C:\PS\changenetwork.png

因此,我们知道如何使用PowerShell向用户显示通知。如果用户有扬声器,我们甚至可以播放喜欢的旋律:

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