脚本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 秒后消失或可以由用户立即取消?
appium 问题四的解决办法(模拟器打开的页面弹出框与脚本打开页面的弹出框不一致)