Temos uma máquina virtual (via Azure) em nosso ambiente de escritório. Nesta VM executamos scripts Python para analisar os dados que extraímos.
Somos cinco na equipe, e cada vez que um de nós entra enquanto outra pessoa está na VM, a pessoa que já está é expulsa.
Existe uma maneira de enviar um prompt da VM que pergunta se alguém está ligado, com botões Sim ou Não? Atualmente tenho este código em um arquivo em lote:
@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
Obviamente, isso só funciona no computador que você está usando. Eu esperava encontrar uma maneira de colocar isso na VM e se alguém pressionar 'Sim', nada acontecerá. Se alguém pressionar 'Não' ou houver um atraso em que ninguém responde (já que não há ninguém na VM), ele executará outro arquivo em lote que temos e que fará login automaticamente na VM para você. Isso é factível?
Até agora, tentamos procurar soluções em cmd ou PowerShell, pois a VM os possui pré-instalados, mas nossa equipe tem experiência no uso de diferentes formas de código, portanto, estaria disposta a tentar outras formas que funcionassem.
Msg
e Net Send
não está funcionando para nós. Estamos usando o Windows 10.
Obrigado,
Mamute
Responder1
O código que você está mostrando é um arquivo .bat/.cmd, não um script do PowerShell. PowerShell, pode abrir caixa de diálogo/mensagem sem nunca recorrer a arquivos em lote.
Net Send sendo uma ferramenta de sistema operacional, pode fazer isso para a máquina ou usuário, mas você precisa dizer o que usar.
Você não está mostrando que está usando nenhum dos parâmetros Net send em sua chamada net send. Você também não está dizendo se o destino está na mesma floresta/domínio que o usuário.
Você não pode enviar uma mensagem para um usuário/computador usando o abaixo que não esteja no mesmo domínio. Computadores e nomes devem ser solucionáveis.
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 ]
Você poderia usar 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
Se quiser usar o PowerShell, você pode, há muitos artigos sobre esse assunto.
Script do PowerShell para enviar mensagens para computadores em rede
Como exibir uma mensagem pop-up em um computador remoto usando o PowerShell