我們的辦公環境中有一個虛擬機器(透過 Azure)。在此虛擬機器中,我們執行 Python 腳本來分析我們提取的資料。
我們團隊中有五個人,每當我們中的一個人繼續工作而其他人在虛擬機器中時,已經在工作的人就會被踢掉。
有沒有辦法推送虛擬機器的提示,詢問是否有人在,並帶有“是”或“否”按鈕?目前我在批次檔中有此程式碼:
@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 中尋找解決方案,因為虛擬機器已預先安裝了這些解決方案,但我們的團隊擁有使用不同形式的程式碼的經驗,因此願意嘗試其他可行的形式。
Msg
並且Net Send
不適合我們。我們使用的是 Windows 10。
謝謝,
長毛象
答案1
您顯示的程式碼是 .bat/.cmd 文件,而不是 PowerShell 腳本。 PowerShell,可以彈出對話框/訊息框,而無需求助於批次檔。
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,也可以,有很多關於該主題的文章。