用于显示通知气球并采取行动的 PowerShell 脚本仅适用于 ISE gui,而不适用于命令行

Jor*_* W. 5 powershell notifications powershell-ise powershell-2.0 windows-7

我看过一堆密切相关的帖子,所以我知道我并不孤单,但没有人给我我正在寻找的答案。如果有人问过并回答过这个问题而我找不到它,我深表歉意。

此脚本创建一个自定义通知区域气球,如果单击该气球,将打开一个指向某个 URL 的新 IE 窗口。在我一直在使用它的 PowerShell ISE GUI 中效果很好。无法使用我在其他帖子中看到的任何选项从命令行运行。具体来说,无法打开 IE 窗口。通知出现没有问题,但是没有IE窗口...??尝试过:

  • 电源外壳 。脚本.ps1
  • powershell -file script.ps1
  • 命令
  • &

等等。

想法?

我的脚本:

#Load the required assemblies
[void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)
#Remove any registered events related to notifications
Remove-Event BalloonClicked_event -ea SilentlyContinue
Unregister-Event -SourceIdentifier BalloonClicked_event -ea silentlycontinue
Remove-Event BalloonClosed_event -ea SilentlyContinue
Unregister-Event -SourceIdentifier BalloonClosed_event -ea silentlycontinue
Remove-Event Disposed -ea SilentlyContinue
Unregister-Event -SourceIdentifier Disposed -ea silentlycontinue

#Create the notification object
$notification = New-Object System.Windows.Forms.NotifyIcon 
#Define various parts of the notification
$notification.Icon = [System.Drawing.SystemIcons]::Information
$notification.BalloonTipTitle = “**Reminder**”
$notification.BalloonTipIcon = “Warning”
$title = “message to user”
$notification.BalloonTipText = $title

#Make balloon tip visible when called
$notification.Visible = $True

## Register a click event with action to take based on event
#Balloon message clicked
register-objectevent $notification BalloonTipClicked BalloonClicked_event -Action {
    Start-Process 'c:\Program Files\Internet Explorer\iexplore.exe' -ArgumentList 'http://someURL.com' -WindowStyle Maximized -Verb Open
    #Get rid of the icon after action is taken
    $notification.Dispose()
    } | Out-Null

#Balloon message closed
register-objectevent $notification BalloonTipClosed BalloonClosed_event -Action {$notification.Dispose()} | Out-Null

#Call the balloon notification
$notification.ShowBalloonTip(1000)
Run Code Online (Sandbox Code Playgroud)

小智 4

之所以在非交互式提示中不起作用,是因为当用户单击气球时,powershell 已经完成处理。

您可以通过以下两种方法之一修复该问题:

  • 在脚本末尾添加 sleep(1),这样它就不会在用户单击气球之前结束;(如果需要,请增加该值,尽管我测试了 1 秒就可以了)
  • 使用 -noexit 命令行参数,然后在用户单击通知或延迟一段时间后以编程方式关闭 powershell(我测试过它会启动 IE,无需更改代码,也无需编写退出部分。)