dos下MSG命令使用详解
最近在编写FTP上传数据的批处理时,需要用到局域网内传输数据来提示错误,突然想起忘了N久没用的命令(netsend), 结果在win7下cmd运行netsend/?运行失败。经过百度大神的搜索,原来从vista之后netsend命令被微软取消了,再次百度,WIN7局域网内发送消息可以使用MSG命令。在坛子里找了好久也没找着真正的使用方法,就自己百度,google终于搞定了,发出来让大家看下。。。。。
MSG系统自带使用帮助
C:\Windows\system32>MSG
将消息发送给用户。
MSG{username|sessionname|sessionid|@filename|*}
[/SERVER:servername][/TIME:seconds][/V][/W][message]
username 标识指定的用户名。
sessionname 会话名。
sessionid 会话ID。
@filename 识别这样一个文件,该文件含有将所发消息发送到的用户名、会话名和会话标识号的列表。
* 给指定服务器上的所有会话发送信息。
/SERVER:servername 要联系的服务器(默认值是当前值)。
/TIME:seconds 等待接收器确认消息的时间延迟。
/V 显示有关执行的操作的信息。
/W 等待用户的响应,跟/V一起有用。
message 要发送的消息。如果没有指定,发出提示,或者从stdin读取。
以下代码均在开始---执行------CMD内测试。
测试条件:本机IP:192.168.1.200 测试电脑IP:192.168.1.201 在同一局域网内,并且可以ping通。
1.根据以上MSG使用方法进行本机调试验证。 MSG/server:192.168.1.200*"Hello" ----------------->>>>> 运行成功,弹出消息对话框。
2.然后再进行局域网内两台电脑通信验证。 MSG/server:192.168.1.201*"Hello" ---------->>>>> 运行失败,报错。获取会话名称时的错误1722。
3.再次百度,在CSDN的一个帖子上有一个办法,CMD内regedit修改注册表HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\TERMIMALSERVER内的ALLOWREMOTERPC的值修改为1(默认为0),因为在XP系统下netsend命令需要开启Messenger信使服务,但是在win7内没有此项服务,所以需要修改注册表来使win7系统可以局域网内发送信息,可XP类似。
4.此时验证还是失败,把测试电脑和本机的防火墙全部关闭,把测试电脑的注册表同上也修改OK,再次验证 MSG/server:192.168.1.201*"Hello"运行失败,报错 192.168.1.201不存在或连接失败。。。最后找来找去,用GOOGLE搜索发现了最终的答案。。打开控制面板,双击凭据管理器,点击添加windows凭据,第一行写测试电脑的IP地址,第二行写测试电脑的用户名,第三行写测试电脑的密码,重启电脑,运行--cmd-------MSG/server:192.168.1.201*"Hello"------------->>> 运行成功。。。
Google搜索的最终答案(英文的,有点英文基础可以看懂的)链接:http://social.technet.microsoft.com/Forums/windows/en-US/344aa708-5477-46f9-be4f-ad8b3b2348b0/sending-a-message-to-win-7-host-with-msgexe?forum=w7itprogeneral
1gotocredentialmanager
2clickaddawindowscredential
3typethenameofthecomputer,usernameandpasswordofthecomputerthatyouaretryingtocontact
4computersthatyouaretryingtocontactmostbeinthesamenetworkasyou.
goodluckittookmemonthstogetitproperlyworking
在以上的学习过程中,发现也可以,cmd内输入\\192.168.0.201然后回车,弹出对话框输入帐号和密码,
下面有一个勾选项,为记录帐号和密码,勾选此项,凭据管理器内自动添加对应的windows凭据。
下面是其他网友的补充
向用户发送消息。信息会以提示框弹出
MS-DOS命令语法
msg {UserName|SessionName|SessionID|@FileName|*} [/server:ServerName] [/time:seconds] [/v] [/w] [message]
MS-DOS命令参数
UserName
要接收消息的用户的名称。
SessionName
要接收消息的会话的名称。
SessionID
其用户要接收消息的会话的数字ID。
@FileName
标识包含有待接收消息的用户名、会话名和会话ID列表的文件。
*
将消息发送给系统中的所有用户。
/server:ServerName
指定要接收消息的会话或用户所属的终端服务器。如果不指定,/server会使用您当前登录的服务器。
/time:seconds
指定您发送的消息在用户屏幕上显示的时间。一旦到期,则该消息从屏幕上消失。如果没有设置期限,则该消息将一直保留在用户屏幕上,直到用户看见这条消息并单击“确定”。
/v
显示关于要执行的操作的信息。
(即输出类似于
"将消息发送到会话Console,显示时间60"
"发送到会话Console的消息收到用户响应"
等信息,表示操作过程和结果的信息给输出来)
/w
等待来自用户的、指出该消息已收到的确认信息。如果用户不立即响应,则使用/time:seconds参数避免可能出现的长时间延迟。将此参数与/v一同使用也很有帮助。
message
待发送消息的正文。如果没有键入任何消息,则系统将提示您输入消息或从标准输入(STDIN)中读取该消息。要发送包含在文件中的消息,请键入小于号(<)后接文件名称。
/?
在命令提示符显示帮助。
MS-DOS命令注释
如果不指定该用户或会话的名称,则msg将显示错误消息。指定会话的名称时,必须是有效名称。
用户必须有发送消息的权限才能发送消息。
MS-DOS命令范例
要向用户MIKES的所有会话发送标题为Let'smeetat1PMtoday的消息,请键入:
msgMIKESLet'smeetat1PMtoday
要向会话MODEM02发送相同的消息,请键入:
msgmodem02Let'smeetat1PMtoday
要向会话12发送消息,请键入:
msg12Let'smeetat1PMtoday
要向包含在文件USERLIST中的所有会话发送消息,请键入:
msg@userlistLet'smeetat1PMtoday
要向已登录的所有用户发送消息,请键入:
msg*Let'smeetat1PMtoday
要在确认超时(例如10秒)限制内向所有用户发送消息,请键入:
msg*/TIME:10Let'smeetat1PMtoday