Wir haben eine virtuelle Maschine (über Azure) in unserer Büroumgebung. In dieser VM führen wir Python-Skripte aus, um die von uns abgerufenen Daten zu analysieren.
Wir sind zu fünft im Team und jedes Mal, wenn einer von uns einsteigt, während jemand anderes in der VM ist, wird die Person, die bereits drin ist, rausgeworfen.
Gibt es eine Möglichkeit, eine Eingabeaufforderung der VM zu senden, die fragt, ob jemand online ist, mit Ja- oder Nein-Schaltflächen? Derzeit habe ich diesen Code in einer Batchdatei:
@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
Dies funktioniert natürlich nur auf dem Computer, den Sie verwenden. Ich hatte gehofft, einen Weg zu finden, dies auf die VM zu übertragen, und wenn jemand auf „Ja“ drückt, passiert nichts. Wenn jemand auf „Nein“ drückt oder es eine Zeitverzögerung gibt, in der niemand antwortet (da niemand auf der VM ist), wird eine weitere Batchdatei ausgeführt, die wir haben und die sich automatisch für Sie bei der VM anmeldet. Ist das machbar?
Bisher haben wir versucht, in cmd oder PowerShell nach Lösungen zu suchen, da diese auf der VM vorinstalliert sind, aber unser Team hat Erfahrung mit der Verwendung anderer Codeformen und wäre daher bereit, andere Formen auszuprobieren, die funktionieren würden.
Msg
und Net Send
funktioniert bei uns nicht. Wir verwenden Windows 10.
Danke,
Mammut
Antwort1
Der von Ihnen angezeigte Code ist eine .bat/.cmd-Datei und kein PowerShell-Skript. PowerShell kann Dialog-/Meldungsfelder öffnen, ohne jemals auf Batchdateien zurückgreifen zu müssen.
Da es sich bei Net Send um ein Betriebssystemtool handelt, kann es dies für die Maschine oder den Benutzer tun, Sie müssen ihm jedoch mitteilen, was verwendet werden soll.
Sie zeigen nicht, dass Sie in Ihrem Net Send-Aufruf einen der Net Send-Parameter verwenden. Sie sagen auch nicht, ob sich das Ziel in derselben Gesamtstruktur/Domäne wie der Benutzer befindet.
Sie können mit den folgenden Angaben keine Nachricht an einen Benutzer/Computer senden, der sich nicht in derselben Domäne befindet. Computer und Namen müssen auflösbar sein.
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 ]
Sie können stattdessen msg.exe verwenden.
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
Wenn Sie PowerShell verwenden möchten, können Sie das tun. Es gibt zahlreiche Artikel zu diesem Thema.
PowerShell-Skript zum Senden von Nachrichten an Netzwerkcomputer
So zeigen Sie mithilfe von Powershell eine Popup-Nachricht auf einem Remotecomputer an