Tomi Hanna
Tomi Hanna

Reputation: 1

Popup message for current user after script powershell

I created PowerShell script which installs an application on computer (windows 7). This script is in GPO and deployed with GPO at logon users. This worked fine, but I want that at the end of installation, my PowerShell script sends at the current logged user on computer a message like "Reboot your computer please".

I tested many things but I don't view popup, maybe because my script are execute with admin rights (not with user rights).

Test:

#$wshell = New-Object -ComObject Wscript.Shell
#$wshell.Popup("Operation Completed",0,"Done",0x1)


[Windows.Forms.MessageBox]::Show(“My message”, , [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)

Upvotes: 0

Views: 5606

Answers (2)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200213

You need to load the assembly providing the MessageBox class first, and you cannot omit the message box title if you want to specify buttons and/or icons.

Add-Type -Assembly 'System.Windows.Forms'

[Windows.Forms.MessageBox]::Show(“My message”, "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)
#                                              ^^

You can use an empty string or $null here, but simply not providing a value (like you could do in VBScript) is not allowed.

As a side-note, I'd recommend avoiding typographic quotes in your code. Although PowerShell will tolerate them most of the time, they might cause issues sometimes. Always use straight quotes to be on the safe side.


Edit: Since you're running the script via a machine policy it cannot display message boxes to the logged-in user, because it's running in a different user context. All you can do is have a user logon script check whether the software is installed, and then display a message to the user. This works, because a user logon script running in the user's context.

Upvotes: 0

Richard
Richard

Reputation: 7000

Your script may be popping up the message but then closing the PowerShell console immediately after, removing the popup. Try waiting on the result of the popup before closing the PowerShell instance:

$wshell = New-Object -ComObject Wscript.Shell
$result = $wshell.Popup("Operation Completed",0,"Done",0x1)

Upvotes: 1

Related Questions