Como enviar um prompt para uma área de trabalho remota que aciona uma ação

Como enviar um prompt para uma área de trabalho remota que aciona uma ação

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.

Msge Net Sendnã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

jdhitsolutions/Send-PopupMessage.ps1

informação relacionada