首页 > 解决方案 > PowerShell - 在远程计算机屏幕上显示消息

问题描述

当我使用 PowerShell - Invoke-Command 等远程运行命令或安装软件时,我有时希望能够在远程屏幕上显示一条消息,以便用户知道发生了什么事情,或者工作何时完成等。

如果可能的话,我想使这条消息看起来尽可能专业,例如,如果可以的话,它比标准的 winform 消息框更好吗?如果可能的话,也许更多的是带有彩色背景和使用图像的 Windows 10 风格。

花了一段时间谷歌搜索,但大多数似乎与使用过时的方法有关,例如 net-send 或使用 msg.exe。

谢谢

标签: powershellpowershell-remoting

解决方案


https://michlstechblog.info/blog/powershell-show-a-messagebox/

所以问题真的不是创建消息框本身,而是让它显示在用户会话中。

因此,当您对系统运行命令时,您正在使用您的凭据来运行该命令,因此它不会显示在用户会话中。您可以通过使用任务调度程序在用户上下文中运行它来解决此问题。我有一个脚本可以为您完成所有这些工作,但是我讨厌重新创建轮子,并且必须等到星期一(当我在工作时)才能在此处发布。

它在您的会话中接受用户输入,将其输出到 vbs,然后将其通过消息复制到用户机器,并且任务计划设置为立即为登录的用户运行。

编辑:脚本是没有任务调度程序的。我只是调用gwmi win32_computersystem | Select -ExpandProperty username以使当前用户登录并将其添加到任务中。

#Prompt for messge
$strMSG = Read-Host -Prompt "Enter message"

#deleting vbs if it exists
del C:\brief\test.vbs

#creating vbs from scratch so it doesnt override
New-Item C:\brief\test.vbs

#Appending each the values to a seperate line
Add-Content C:\brief\test.vbs 'Set objShell = Wscript.CreateObject("WScript.Shell")' 
Add-Content C:\brief\test.vbs "strText = `"$strMSG`"" 
Add-Content C:\brief\test.vbs 'intButton = objShell.Popup(strText,0,"Computer Support",48)'

#calling on the script
& cscript C:\brief\test.vbs

推荐阅读