我们的办公环境中有一个虚拟机(通过 Azure)。在这个虚拟机中,我们运行 Python 脚本来分析我们提取的数据。
我们团队有五个人,每次我们中的一个人继续工作而其他人仍在 VM 中,那么已经在线的人就会被踢出。
有没有办法通过“是”或“否”按钮来推送虚拟机的提示,询问是否有人在线?目前,我在批处理文件中有以下代码:
@echo off
echo code=Msgbox("Is someone one the VM?", vbYesNo, "VM?") > "%temp%\popupBox.vbs"
echo WScript.Quit code >> "%temp%\popupBox.vbs"
cscript /nologo "%temp%\popupBox.vbs"
if %errorlevel%==7 call :cancel_tag
if %errorlevel%==6 call :ok_tag
exit /b 1
:ok_tag
echo Yes I am!
exit /b
:cancel_tag
echo No!
exit /b
这显然只适用于您正在使用的计算机,我希望找到一种方法将其推送到虚拟机上,如果有人按“是”,则什么也不会发生。如果有人按“否”或有时间延迟而无人应答(因为虚拟机上没有人),那么它将运行我们拥有的另一个批处理文件,该文件会自动为您登录虚拟机。这可行吗?
到目前为止,我们已经尝试在 cmd 或 PowerShell 中寻找解决方案,因为 VM 已预先安装了这些,但我们的团队有使用不同形式的代码的经验,因此愿意尝试其他可行的形式。
Msg
对Net Send
我们来说不起作用。我们使用的是 Windows 10。
谢谢,
长毛象
答案1
您显示的代码是 .bat/.cmd 文件,而不是 PowerShell 脚本。PowerShell 可以弹出对话框/消息框,而无需借助批处理文件。
Net Send 作为一个操作系统工具,可以对机器或用户执行此操作,但您必须告诉它使用什么。
您没有表明您在 net send 调用中使用了任何 Net send 参数。您也没有说明目标是否与用户位于同一林/域中。
您无法使用以下不在同一域中的用户/计算机发送消息。计算机和名称必须可解析。
net send
The syntax of this command is:
NET
[ ACCOUNTS | COMPUTER | CONFIG | CONTINUE | FILE | GROUP | HELP |
HELPMSG | LOCALGROUP | PAUSE | SESSION | SHARE | START |
STATISTICS | STOP | TIME | USE | USER | VIEW ]
你可以使用 msg.exe
msg
Send a message to a user.
MSG {username | sessionname | sessionid | @filename | *}
[/SERVER:servername] [/TIME:seconds] [/V] [/W] [message]
username Identifies the specified username.
sessionname The name of the session.
sessionid The ID of the session.
@filename Identifies a file containing a list of usernames,
sessionnames, and sessionids to send the message to.
* Send message to all sessions on specified server.
/SERVER:servername server to contact (default is current).
/TIME:seconds Time delay to wait for receiver to acknowledge msg.
/V Display information about actions being performed.
/W Wait for response from user, useful with /V.
message Message to send. If none specified, prompts for it
or reads from stdin.
msg SomeDomainUserName /server:SomeDomainHostname message logoff
如果您想使用 PowerShell,您可以,有很多关于该主题的文章。