yan2021
Goto Top

Nachricht an mehrere PCs im Netzwerk senden

Hallo,

ich würde gerne eine Nachricht an mehrere PCs in unserem Netzwerk senden.
Und es soll so sein, dass ein Message-Fenster auf jedem Rechner erscheint, wie dieses hier:

xxxxx

Für einen User ist das kein Problem. Da habe ich es so gemacht:

msg Max-Maier /SERVER:10.20.3.22 "Hallo, das ist ein Test!"  

Das funktioniert sehr gut.

Weiterhin habe ich es über eine Batch versucht (hier Nachricht an 2 User) wie folgt:

@echo off
 
:: Liste der Empfaenger:
set userlist=Max-Meier Katrin-Vogel
 
:: Hier die Nachricht eintragen:
set sMsgText=Hallo, das ist eine Test-Nachricht
 
echo on
for %%a in (%userlist%) do net send %%a %sMsgText%
@echo off
 
echo %0 beendet.
pause

Diesen Code hatte ich im Internet gefunden.
Leider funktionierte das nicht.

Dann habe ich hier aus dem Forum einen Thread gefunden, in dem u.a. die folgende Lösung vorgeschlagen worden war:

for %%i in (10.20.2.22 10.20.3.32) do msg * \\SERVER:%%i Hallo, das ist ein Test

Auch das funktionierte nicht.

Könnt Ihr mir helfen, eine solche Textnachricht - inkl. FENSTER - an mehrere User eines NW zu senden?

Danke und Grüße von
Yan face-wink

Content-ID: 669511

Url: https://administrator.de/contentid/669511

Ausgedruckt am: 17.12.2024 um 05:12 Uhr

itisnapanto
itisnapanto 15.11.2024 um 09:44:59 Uhr
Goto Top
Mit Powershell geht es auch.
Hier musst das nur noch in eine Schleife einbinden.

$name = "PC01"
$msg = "Hier die Nachricht rein"
Invoke-WmiMethod -Path Win32_Process -Name Create -ArgumentList "msg * $msg" -ComputerName $name


Gruss
Penny.Cilin
Penny.Cilin 15.11.2024 um 09:48:57 Uhr
Goto Top
Moin,

schob mal die Hilfefunktion von msg aufgerufen?
Es gibt einen Parameter @dateiname.

snap

Gruss Penny.
Yan2021
Yan2021 15.11.2024 aktualisiert um 10:08:43 Uhr
Goto Top
Hallo und danke für die Infos.

@itisnapanto
Wie sende ich das denn an mehrere ausgwählte Benutzer im Netzwerk?

@Penny.Cilin
oh, das hatte ich tatsächlich nicht gemacht.

Als Dateiname würde ich dann eine .TXT-Datei nehmen?
Und in der Batch dann wie folgt eintragen?

msg @text-datei.txt * /SERVER:10.20.3.22 "Hallo, das ist ein Test!"    

Beim Servernamen bin ich aber noch nicht sicher, was ich da angeben soll.
Im Beispiel hier habe ich die IP eines Users eingetragen, was ja sicher nicht korrekt ist.

Meine Datei "text-datei.txt" enthält nur folgendes:

Max-Meier
Katrin-Vogel

Was müsste ich noch anpassen?

Grüße von
Yan face-wink
Michi91
Michi91 15.11.2024 um 10:23:28 Uhr
Goto Top
Naja, das was du willst und das was msg kann weicht ein wenig von einander ab.

Du willst einfach nur an USER schicken, MSG erwartet aber COMPUTERNAME( Parameter /server ) und den USER.

Wir brauchen also mehr Details zu deinem Ziel:
- Soll die Nachricht nur an bestimmte PC's oder alle gesendet werden?
- Soll die Nachricht an alle User oder nur an bestimmte geschickt werden?


Grüße
Yan2021
Yan2021 15.11.2024 aktualisiert um 10:31:12 Uhr
Goto Top
Die Nachricht soll an ausgewählte User im Netzwerk gesendet werden, wie ich ja in meiner letzten Nachricht auch geschrieben hatte. Diese entspr. User sind dann auch an dem PC angemeldet mit ihrem Windows-Anmeldenamen.

Deshalb ja auch testweise die beiden Namen, die ich in der Textdatei gespeichert habe. Das wären dann die User mit deren Anmeldenamen am Computer "Vorname-Nachname".

Grüße von
Yan face-wink
Penny.Cilin
Penny.Cilin 15.11.2024 um 10:31:41 Uhr
Goto Top
Beim Servernamen bin ich aber noch nicht sicher, was ich da angeben soll.
Im Beispiel hier habe ich die IP eines Users eingetragen, was ja sicher nicht korrekt ist.

Lesen UND verstehen heißt das Zauberwort!

/SERVER:Servername  Server, mit dem die Verbindung hergestellt wird
                      (Standard ist der aktuelle Server).

Dieser Parameter wird verwendet, wenn Du Server angibst, von WELCHEM die Message gesendet werden soll.
Wenn Du die Message direkt vom File-Server (TCP/IP 10.10.102.1) sendest, brauchst Due den Parameter NICHT anzugeben.

Gruss Penny.
Yan2021
Yan2021 15.11.2024 um 12:00:00 Uhr
Goto Top
OK, ich habe es jetzt so umgesetzt und dabei dann auch den kompletten Pfad zur .txt-Datei angegeben (liegt auf dem Desktop).

Leider hat es nur an meinem Rechner funktioniert. Dort tauchte das Fenster auf.
Am Testrechner (angemeldeter User "DasTest") jedoch nicht.
Dieser Rechner hat aber auch ein Servergespeichertes Profil (testweise halt). Vielleicht liegt es ja auch daran.

Ich habe es nun wie folgt in die Eingabeaufforderung eingegeben:

msg @C:\Users\Vorname-Nachname\Desktop\text-datei.txt * /SERVER:10.20.3.22 "Hallo, das ist ein Test!"  

Dabei ist die IP "10.20.3.22" die IP meines Rechners.
Wie gesagt, kam das Fenster mit der Nachricht auch auf meinem Rechner an, aber nicht auf dem "DasTest"-Rechner.

Grüße von
Yan face-wink
pebcak7123
pebcak7123 15.11.2024 um 13:25:30 Uhr
Goto Top
Moin, soweit ich weis ist das nur zum senden von Nachrichten an andere Benutzer auf einem bzw. eigentlich demselben Terminalserver gedacht und man muss zusätzlich eine spezielle Berechtigung haben.
1ITlermit0ahnung
1ITlermit0ahnung 15.11.2024 um 13:30:03 Uhr
Goto Top
Es ist jetzt nicht genau dein Thema, ich habe mich bei uns über das Management auf die Powershell geschaltet und diesen Befehl ausgegeben. Vielleicht hilft es dir etwas face-smile

Invoke-Command  -ScriptBlock {
    $ComputerName = [System.Environment]::MachineName
    $UserName = [System.Environment]::UserName
    $CurrentTime = [System.DateTime]::Now.ToString("dd.MM.yyyy HH:mm:ss")  
    $message = "Ihr System wurde gehackt!`nComputername: $ComputerName`nBenutzername: $UserName`nAktuelle Uhrzeit: $CurrentTime"  
    msg * $message
}
Michi91
Michi91 15.11.2024 aktualisiert um 13:57:52 Uhr
Goto Top
Dabei ist die IP "10.20.3.22" die IP meines Rechners.
Du musst auch die IP des Rechners angeben, an dem der Benutzer sitzt ;)

Das habe ich versucht mit meinem letzten Beitrag zu erklären face-smile
MSG funktioniert vereinfacht erklärt in zwei Stufen
1. Versand der Nachricht an den gewünscht Empfänger-PC (sogenannter SERVER, Relikt aus dem letzten Jahrtausend)
2. Der Empfänger-PC guckt für welchen der Benutzer ( an einem PC kann ja mehr als eine Person angemeldet sein)
die Nachricht ist, und öffnet bei deinem Treffer die GUI.

Guck also mal, was passiert wenn du die IP des EmpfängerUsers eingibst. Wenn keine Nachricht kommt, hast du vermutlich ein Berechtigungsproblem face-smile
Dilbert-MD
Dilbert-MD 15.11.2024 um 17:01:36 Uhr
Goto Top
Hallo,

wäre das "net send" Kommando ggf. ein Lösungsweg?
(siehe auch https://www.net-send.net/)

Gruß
Yan2021
Yan2021 18.11.2024 um 10:42:32 Uhr
Goto Top
Zitat von @Penny.Cilin:

Beim Servernamen bin ich aber noch nicht sicher, was ich da angeben soll.
Im Beispiel hier habe ich die IP eines Users eingetragen, was ja sicher nicht korrekt ist.

Lesen UND verstehen heißt das Zauberwort!

/SERVER:Servername  Server, mit dem die Verbindung hergestellt wird
                      (Standard ist der aktuelle Server).

Dieser Parameter wird verwendet, wenn Du Server angibst, von WELCHEM die Message gesendet werden soll.
Wenn Du die Message direkt vom File-Server (TCP/IP 10.10.102.1) sendest, brauchst Due den Parameter NICHT anzugeben.

Gruss Penny.

@Michi91
Wie Du hier im Zitat siehst, hat @Penny.Cilin es genau anders geschrieben und deshalb habe ich auch die IP meines Rechners eingegeben. Was ist denn nun richtig?

Grüße von
Yan face-wink
Michi91
Michi91 20.11.2024 um 17:30:36 Uhr
Goto Top
Hey @Yan2021

probiers doch einfach selber mal aus ;) Und markier den Beitrag als Lösung, der die Lösung ist :D
Yan2021
Yan2021 21.11.2024 aktualisiert um 09:03:55 Uhr
Goto Top
...das hatte ich ja bereits.
Die Message kommt nur bei mir an, aber nicht auf dem anderen PC, den ich mit angegeben hatte.

Deine Variante mit Angabe des Empfängers der Email wäre ja auch unlogisch, denn ich schreibe ja mehrere Personen an. Und in der Textdatei "msg.txt" habe ich ja die Namen der Rechner aufgeführt, die diese Message empfangen sollen.

Im CMD gab ich daher ein:

msg @"X:\ADMIN\BATCH - Powershell\Nachricht an mehrere MA senden"\msg.txt * /SERVER:10.20.3.22 "Hallo, das ist ein Test!"  

Und die "msg.txt" sieht so aus:

Max-Mueller
DasTest

...also die Windows-Anmeldenamen.

Wie ja schon geschrieben, habe lediglich ich selbst auf meinem Desktop die Nachricht erhalten, aber nicht der zweite PC.

Grüße von
Yan face-wink
Michi91
Michi91 21.11.2024 aktualisiert um 11:00:05 Uhr
Goto Top
Habs gerade nochmal gestestet. Funktioniert bei mir so wie es soll... Ich schicke eine Nachricht von meinem PC und bei Lieschen Müller am PC erscheint die Nachricht...


Was passiert genau wenn du folgenden Befehl von deinem PC eingibst:
msg DasTest /Server:IPVONDASTESTPC Test


Natürlich muss man deinen Loop danach nochmal entsprechend anpassen, aber im ersten Schritt geht es darum überhaupt eine Nachricht an einem anderen PC anzuzeigen, oder nicht?


Ein komplettes Powershell könnte später(!) wie folgt aussehen:
# IP-Liste und Benutzerliste definieren
$IPListe = @("192.168.1.1", "192.168.1.2", "192.168.1.3")    
$BenutzerListe = @("Benutzer1", "Benutzer2", "Benutzer3")    

# Alternativ:
#$IPList = Get-Content "IPList.txt" 
#$UserList = Get-Content "UserList.txt" 

# Äußere Schleife durch die IP-Liste
foreach ($IP in $IPListe) {
    # Innere Schleife durch die Benutzerliste
    foreach ($Benutzer in $BenutzerListe) {
        # Nachricht senden
        $Befehl = "msg $Benutzer /Server:$IP Test"  
        Write-Host "Führe aus: $Befehl"  
        Invoke-Expression $Befehl  # Führt den Befehl aus
    }
}
Yan2021
Yan2021 21.11.2024 aktualisiert um 15:03:04 Uhr
Goto Top
Hi Michi91.

Danke, das hat funktioniert mit

msg DasTest /Server:10.20.3.52 Test

Die Nachricht erschien auf dem Desktop von "DasTest", der die IP 10.20.3.52 hat.
Also muss bei Server doch die Empfänger-IP rein... hmmm... ist für mich nicht logisch face-sad

Und wie mache ich das nun über Batch (nicht PS), wenn ich mehrere Empfänger erreichen will, wobei ich ja hier eine Textdatei "msg.txt" habe, in der die Empfänger drin stehen (jedoch mit deren Windows-Anmeldenamen).

msg @"C:\BATCH\Nachricht an mehrere MA senden"\msg.txt * /SERVER:10.20.3.52 "Hallo, das ist ein Test!"  

Dieser Code würde ja nicht funktionieren, da er nur einen Empfänger erreichen würde (10.20.3.52) und das wäre hier der Rechner "DasTest".

Wie kann ich die Textdatei "msg.txt" nutzen, die alle Empfänger enthält?
Vielleicht muss ich ja da auch die IP-Adressen der Empfänger eintragen, statt die Windows-Anmeldenamen.

UPDATE:
Ich habe jetzt auch mal die Powershell-Lösung vorbereitet und die beiden TXT-Dateien (IPList + UserList) angelegt.
Ebenso ein .ps1-Datei mit Deinem Code von oben.

Den oberen Teil - also wo die User und IPs manuell eingetragen wurden - habe ich schon mit meinen Daten angepaßt, dann ausprobiert und danach hat mein Rechner und der Rechner "DasTest" die Nachricht erhalten.
Die Ausführung der Datei habe ich direkt über die Oberfläche von PS gemacht (Datei ausführen, bzw. F5).
Später werde ich mir hier mit einer Batch behelfen, die dann die .ps1-Datei ausführt face-wink

Für die Version mit den beiden Textdateien ist mir jedoch noch nicht klar, wo ich im PS-Code den Pfad zu diesen TXT-Dateien angeben müsste.

UPDATE 2:
Habe jetzt auch die Version mit den beiden Textdateien (IPList + UserList) schon durchgeführt und den Pfad einfach vor "IPList.txt", bzw. "UserList.txt" gesetzt... hat funktioniert face-smile

Die .ps1-Datei führe ich dann über eine Batch aus. Das funktioniert für mich einfacher, da ich nur einen Doppelklick auf die entspr. Batch-Datei machen muss.

Jetzt hätte ich nur noch zwei Fragen:
1) Wäre es auch möglich, die eigentliche Nachricht (hier "Test") z.B. auch in eine Textdatei abzulegen, die dann im PS-Code aufgeführt wird? Das würde Einiges nochmal erheblich vereinfachen, da man dann den jeweiligen Text nur in dieser Textdatei anpassen muss und nicht aufwendig im PS-Code.

2) Wenn ich in die beiden TXT-Dateien schon mal sämtliche IP-Adressen eintragen will, bzw. sämtliche Windows-Anmeldenamen, damit ich diese nicht immer suchen muss... wie kann ich das tun, damit diese zusätzlichen Namen nicht berücksichtigt werden?
Im Moment habe ich einfach mal ein #-Zeichen vor die IPs, bzw. vor die Namen gesetzt, aber dann nudelt die PS-Datei irgendwie alle IPs und Namen offenbar durch und es dauert lange, bis die Nachricht dann versendet ist. Zwar wird die Nachricht so nur an die Personen gesendet, wo kein #-Zeichen davor ist, aber es dauert halt lange face-sad

Grüße von,
Yan face-wink
Michi91
Michi91 21.11.2024 um 16:42:06 Uhr
Goto Top
Also muss bei Server doch die Empfänger-IP rein... hmmm... ist für mich nicht logisch face-sad
Jap, hatte ja schon angedeutet, dass die Bezeichnung "Server" in diesem Fall aus dem letzten Jahrtausend stammt und so unter Windows heute nicht mehr verwendet werden würden. Das genauer zu erklären, würden den Rahmen sprengen, im Prinzip ist der PC der Server für den Benutzerdesktop... Falls du tiefer eintauchen willst, kannst du dir YT Video zur Funktionsweise von Desktops unter Linux erklären lassen... da taucht auch wieder Client und Server auf... aber vorsicht, ist echt harte Kost wenn man sonst eine andere Betrachtung auf "Server" gewohnt ist...


Zu 1)
ja das geht

# IP-Liste und Benutzerliste definieren
$IPList = Get-Content "IPList.txt"   
$UserList = Get-Content "UserList.txt"   

# Nachricht aus einer Datei laden
$Nachricht = Get-Content "Message.txt"  

# Äußere Schleife durch die IP-Liste
foreach ($IP in $IPListe) {
    # Innere Schleife durch die Benutzerliste
    foreach ($Benutzer in $BenutzerListe) {
        # Nachricht senden
        $Befehl = "msg $Benutzer /Server:$IP $Nachricht"    
        Write-Host "Führe aus: $Befehl"    
        Invoke-Expression $Befehl  # Führt den Befehl aus
    }
}

Zu 2) # solltest du nicht machen... Kommentare greifen da nicht und er wird versuchen eine Verbindung zu "#IP" herzustellen... Du könntest dir eine zweite Liste "UserList_original" anlegen und diese jedes mal kopieren und halt die Zeilen löschen, die du nicht brauchst.
Noch schicker wäre sicher eine GUI, aber das sprengt leider meine freiwillige Supportzeit :D


Grüße
Yan2021
Yan2021 22.11.2024 um 08:08:51 Uhr
Goto Top
OK und danke für die weitere Mühe...

Habe das jetzt so umgesetzt.
Frage mich nur noch, wieso eigentlich die Windows Anmeldenamen PLUS die IP-Adressen der Empfänger eingegeben werden müssen und wieso nicht eins davon ausreicht?
Und... wieso man Beides nicht in EINE TXT-Datei schreiben kann?
Ist nur einfach so zum Verständnis.

Danke Dir und Grüße von
Yan face-wink
pebcak7123
pebcak7123 22.11.2024 um 08:15:51 Uhr
Goto Top
Weil du ein uraltes Programm benutzt das mal dazu gedacht war anderen Benutzern auf Terminal Severn Nachrichten zu senden. Erstaunlich das es überhaupt noch funktioniert
Yan2021
Yan2021 22.11.2024 um 08:38:18 Uhr
Goto Top
...aber ich habe es doch jetzt mit PowerShell gelöst und nicht per Batch. Wieso ist das "uralt"?
Und mir fiel gerade auf, dass ich selbst die Nachricht zweimal erhalte. Der Test-PC erhält die Nachricht nur einmal, obwohl ich mich in den Dateien "IPList.txt" und "UserList.txt" natürlich auch nur einmal eingetragen habe, genau wie den Test-PC.

Hast Du / habt Ihr dafür auch ne Erklärung?

Grüße von
Yan face-wink
pebcak7123
pebcak7123 22.11.2024 um 08:48:01 Uhr
Goto Top
msg.exe ist uralt, ob du das nun über powershell, cmd oder sonst was aufrufst ist egal.
Yan2021
Yan2021 22.11.2024 um 09:47:01 Uhr
Goto Top
...aber in dem hier angegebenen Code von @Michi91 steht nirgendwo was von "msg.exe". Im vorherigen Code gab es eine Datei "msg.txt", in der die Nachricht drin stand. Aber von "msg.exe" war nie die Rede.

Hast Du auch eine Antwort zu meinen weiteren Fragen?

Grüße von
Yan face-wink
pebcak7123
pebcak7123 22.11.2024 um 11:17:43 Uhr
Goto Top
Äh und was dachtest du ruft das "msg" in den scripts auf wenn nicht msg.exe ?
Yan2021
Yan2021 22.11.2024 um 11:24:15 Uhr
Goto Top
OK, jetzt verstehe ich, was Du gemeint hast. face-wink

Und... Antworten auf meine anderen Fragen?

Grüße von
Yan face-wink
Yan2021
Yan2021 29.11.2024 um 09:42:31 Uhr
Goto Top
Hallo,

ich möchte hier nochmal wegen meiner Frage vom 22.11.24 nachfragen...

Mir fiel bei einem Test vor einigen Tagen auf, dass ich selbst auf meinem PC die Nachricht zweimal erhalte. Der Test-PC erhält die Nachricht nur einmal, obwohl ich mich in den Dateien "IPList.txt" und "UserList.txt" natürlich auch nur einmal eingetragen habe, genau wie den Test-PC.

Hat jemand von Euch eine Erklärung dazu?

Grüße von
Yan face-wink