Question:
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#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) |
Answer:
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.)