脚本powershell后当前用户的弹出消息

Posted

技术标签:

【中文标题】脚本powershell后当前用户的弹出消息【英文标题】:Popup message for current user after script powershell 【发布时间】:2016-08-01 09:00:23 【问题描述】:

我创建了PowerShell 脚本,用于在计算机上安装应用程序(Windows 7)。 此脚本位于 GPO 中,并在登录用户处与 GPO 一起部署。这工作正常,但我希望在安装结束时,我的 powershell 脚本向计算机上当前登录的用户发送一条消息,例如“请重新启动您的计算机”。

我测试了很多东西,但我没有查看弹出窗口,可能是因为我的脚本是使用管理员权限(而不是用户权限)执行的。

测试:

#$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)

【问题讨论】:

您说脚本是通过 GPO 部署的。如何/在哪里?作为用户策略还是机器策略? 您好,机器策略。我在 OU 中移动计算机对象(Windows 7)并应用 GPO(Windows 参数/脚本/启动) 通过机器策略启动的脚本不在用户的上下文中运行。您不能让他们向用户显示消息。您可以做的是让用户登录脚本检查软件是否存在(安装完成,无论如何)并向用户显示一条消息。 【参考方案1】:

您的脚本可能会弹出消息,但随后立即关闭PowerShell 控制台,删除弹出窗口。在关闭PowerShell 实例之前尝试等待弹出的结果:

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

【讨论】:

【参考方案2】:

您需要先加载提供MessageBox 类的程序集,如果要指定按钮和/或图标,则不能省略消息框标题。

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

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

您可以在此处使用空字符串或$null,但不允许简单地不提供值(就像您可以在 VBScript 中那样)。

作为旁注,我建议您避免在代码中使用印刷引号。尽管 PowerShell 在大多数情况下都会容忍它们,但有时它们可​​能会导致问题。为了安全起见,请始终使用直引号。


编辑:由于您通过机器策略运行脚本,因此它无法向登录用户显示消息框,因为它在不同的用户上下文中运行。您所能做的就是让用户登录脚本检查是否安装了软件,然后向用户显示一条消息。这是可行的,因为用户登录脚本在用户的上下文中运行。

【讨论】:

也许如果我向所有连接在计算机上的用户发送消息?我可以在安装包后强制重启计算机,如
Restart-Computer -computername localhost -force
应该可以,但它可能会让你的用户感到惊讶,所以我不推荐它。

以上是关于脚本powershell后当前用户的弹出消息的主要内容,如果未能解决你的问题,请参考以下文章

突出显示文本时出现的弹出消息

如何在 Swift 中显示一条弹出消息,该消息在 3 秒后消失或可以由用户立即取消?

在弹出窗口中从 iframe 向后台脚本发送消息

appium 问题四的解决办法(模拟器打开的页面弹出框与脚本打开页面的弹出框不一致)

appium 问题四的解决办法(模拟器打开的页面弹出框与脚本打开页面的弹出框不一致)

bada 编程 - 带键盘的弹出消息