Windows系统中msg命令的完整使用方法及相关示例
在 Windows 系统中,msg是内置的命令行工具,用于向本地/远程 Windows 终端会话发送消息。以下是msg** 命令的完整使用方法**,包括语法、参数、示例和注意事项,覆盖本地/远程、单用户/多用户场景。
一、核心前提
权限要求:
发送本地消息:普通用户即可(需确保终端服务未禁用)。
发送远程消息:需拥有目标主机的管理员权限,且目标主机开启
Terminal Services服务(默认开启)。
系统支持:Windows XP/7/8/10/11、Windows Server 2003+(家庭版可能限制部分功能)。
接收端限制:消息仅发送到终端会话(如 cmd/PowerShell 窗口、远程桌面会话),不会弹出桌面弹窗(需其他工具实现桌面弹窗,文末补充)。
二、msg 命令基础语法
| 参数 | 说明 |
|---|---|
用户名 | 发送给指定本地/远程用户(如Administrator) |
会话名 | 发送给指定会话(如console本地控制台、rdp-tcp#1远程桌面会话) |
会话ID | 数字ID(可通过query session查看) |
* | 发送给目标主机的所有会话/用户 |
/SERVER:目标主机 | 指定远程主机(IP/主机名,默认本地主机) |
/TIME:秒数 | 消息停留时间(默认60秒,0=永久停留,直到用户确认) |
/V | 显示详细执行过程(调试用) |
/W | 等待用户确认消息后再退出命令(需配合/TIME:0效果更佳) |
消息内容 | 要发送的文本(无内容则从标准输入读取,按 Ctrl+Z 结束) |
三、常用示例(本地/远程)
示例1:发送给本地当前用户(最基础)
%username%是系统变量,自动替换为当前登录用户名。效果:当前用户的 cmd/PowerShell 窗口会弹出消息框(标题为“Message from XXX on YYY”)。
示例2:发送给本地所有用户
*表示所有本地会话,/TIME:30消息显示30秒后自动消失。
示例3:发送给远程主机的指定用户
前提:
你已登录的账户有
192.168.1.100的管理员权限;目标主机开启了文件和打印机共享(445端口)、Terminal Services 服务;
目标主机未禁用远程消息(组策略:计算机配置→管理模板→系统→终端服务→“允许用户使用 MSG 命令发送消息”启用)。
示例4:发送多行/长消息
如果消息内容较长,可通过管道或输入重定向:
示例5:指定会话ID发送(精准定位)
先查看本地会话:
输出示例:
发送给 ID=2 的会话:
四、常见问题与解决
问题1:“Error 5 getting session names”(权限不足)
原因:非管理员权限发送远程消息,或目标主机拒绝访问。
解决:
以管理员身份运行 cmd/PowerShell;
目标主机添加你的账户到“管理员组”;
关闭目标主机的防火墙(或放行445、3389端口)。
问题2:“No recipients exist”(无接收者)
原因:用户名/会话ID错误,或目标用户未登录。
解决:
用
query session /SERVER:目标主机确认目标主机的有效会话;确保目标用户已登录(而非仅开机)。
问题3:本地发送消息无弹窗
原因:Windows 10/11 禁用了“终端服务消息通知”。
解决:
按 Win+R 输入
gpedit.msc打开组策略;定位到:计算机配置→管理模板→系统→终端服务→终端服务器→消息通知;
启用“允许用户使用 MSG 命令发送消息”和“允许接收终端服务消息”。
五、扩展:发送桌面弹窗(非msg命令)
msg仅发送到终端会话,若需桌面弹窗(类似 MessageBox),可通过以下方法:
方法1:PowerShell 弹窗(本地)
- 注意:需先运行
Add-Type -AssemblyName PresentationFramework加载组件。
方法2:VBScript 弹窗(本地/远程)
新建
popup.vbs:本地运行:
远程运行(需管理员权限):
(需提前下载 PsExec 工具)
总结
msg命令适合终端会话消息(如服务器运维、多用户终端通知),语法简单且无需额外工具;桌面弹窗需借助 PowerShell/VBScript/PsExec,适合面向普通用户的可视化通知;
远程操作核心是“管理员权限+端口放行+服务开启”,需确保目标主机的权限和网络配置。