Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PowerShell script to display Notification balloon and take action only works in ISE gui, not from commandline

I've seen a bunch of closely related posts so I know i'm not alone, but none have given me the answer I'm looking for. Apologies if this has been asked and answered and I couldn't find it.

this script creates a custom notification area balloon, which, if clicked on is meant to open a new IE window to some URL. Works great from the PowerShell ISE GUI that I've been working with it in. Can't get it to work from command-line using any of the options i've seen suggested in other posts. Specifically, can't get the IE window to open. The notification appears no problem, but no IE window...?? Tried with:

  • powershell . script.ps1
  • powershell -file script.ps1
  • command
  • &

etc.

Thoughts?

My script:

#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)
like image 708
Jordan W. Avatar asked Mar 21 '11 21:03

Jordan W.


People also ask

What are the three key features in PowerShell ISE?

The basic layout of the PowerShell ISE. The user interface is broken into three panes: editor, output, and command input.

What is Windows PowerShell ISE?

The Windows PowerShell ISE is fundamentally an editing tool that is used to create, edit, test and execute PowerShell scripts in Windows environments. The ISE offers a more flexible and interactive environment than a traditional PowerShell console. Save time and reduce errors when creating scripts.


1 Answers

The reason why it doesn't work in non-interactive prompts is that powershell has already finished processing when the user clicks the balloon.

You can fix that in one of two ways:

  • add a sleep(1) at the end of the script, so it doesn't end before the user clicking the balloon; (increase the value if needed, although I tested w/ 1 sec just fine)
  • use the -noexit commandline parameter and then close powershell programatically upon the user clicking the notification or after some delay (I tested that it would launch IE with no changes to your code, didn't bother coding the exit part.)
like image 105
Fernando Madruga Avatar answered Oct 04 '22 15:10

Fernando Madruga