dentologicum
Goto Top

Ein bestimmtes Programm vom Server aus , auf allen Clients in der Domäne abschalten bzw. schliessen

Ziel dessen ist es bei einem Programm ein Update auf dem Server durchzuführen, wobei alle angemeldeten Clients an diesem Programm sich schliessen und das Update erfolgen kann.
Dies ist lt der Software "Evident" - PRaxissoftware, zwingend nötig und muss so sein.

Da es in der Domain 2 Reale Standorte gibt getrennt ca 250 Meter ist es schwer das per "Turnschuh" zu realisieren

Ist es möglich das, wenn das Programm ein Update auf dem Server durchführen will , alle angemeldeten Clients an diesem Programm sich schliessen und das Update erfolgen kann.
Dies ist lt der Software "Evident" - PRaxissoftware, zwingend nötig und muss so sein.

Ich habe schon gegoogelt wie ein Weltmeister, aber bin auch leider nicht so der Script-Gott das ich mir eine Batch von 0 an selber erstellen kann.

Habe schon das Programm pskill.exe probiert aber es ist nicht das was ich gesucht habe.

Hat wer eine Idee?

LG
Martin

Content-ID: 180200

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

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

LordXearo
LordXearo 08.02.2012 um 09:33:08 Uhr
Goto Top
Hallo,

sollten die Updates nicht sowieso besser ausgeführt werden, wenn keiner am arbeiten ist?

Ansonsten könnte man leicht mit powershell eine COmputerliste abarbeiten, die nach der "Programm.exe" sucht und wenn gefunden das Programm beendet.

Damit könnte man anfangen:

tasklist | find '"firefox'"

if($lastexitcode -eq 0){
taskkill /IM "firefox.exe"'
}

Edit:

Im Prinzip muss man noch nicht mal überprüft werden ob das Programm läuft.

Achte dadrauf, dass das Skript unter einem Account ausgeführt wird, der auf allen Clients Admin Berechtigung hat.
Dentologicum
Dentologicum 08.02.2012 um 09:42:40 Uhr
Goto Top
Soweit richtig die Aussage, das keiner am arbeiten sein sollte aber zur Aufklärung dessen:

Dies ist eine Zahnklinik mit ca 71 Workstationen und 22 Röntgenapperate und Medizinsches Gebimsel, welche auch teilweise auf das Programm zugreifen.

ATM ist es so das im Neuen Gebäude (dahin wird umgezogen) ca 55 % davon stehen aber im alten Gebäude der Rest. Die Arbeitszeiten din generell 365 Tage im Jahr von 07:00 Uhr bis 22:00 Uhr im 4 Schichtbetrieb. von daher ist die Updatezeit begrenzt.

Wenn nun im Neuen Gebäude bescheid gesagt wird das in 30 Min das Update eingespielt wird (und glaub mir es ist oft gesagt worden) und man rüber läuft und im alten Gebäude dies auch sagen will kannste mit 10000%tiger Sicherheit davon ausgehen das wenn ich an den Server gehe (er steht im alten Gebäude *noch*) wieder irgendwo im neuen Gebäude einer wieder das Programm angeworfen hat auf dem PC oder aber eine Sterilisatiosgerät angemacht wurde...

Um diesen Umstand nun zu ändern suche ich halt eine LÖsung die es erlaubt dieses Programm auf einmal an allen CLients zu schliessen und zu beenden.

Das gute daran ist das wenn das Update läuft, kein Client sich anmelden kann weil das dann autom. verhindert wird, was einfach nur klappen soll ist der Befehl "Kill/stop oder sonstwas" --> Update starten --> nach Update können die CLients wieder rann.

LG
MArtin

EDIT:

wäre diese LÖsung auch per batch machbar? weil ich denke, man könnte daran ansetzen und dieses Script erweitern indem mann sagt

tasklist | find '"firefox'"
tasklist | find "evident'"

if($lastexitcode -eq 0){
taskkill /IM "firefox.exe"'
}
if($lastexitcode -eq 0){
taskkill /IM "evident.ex"'
}
LordXearo
LordXearo 08.02.2012 um 09:55:01 Uhr
Goto Top
Ja mit Batch geht es auch, bisher habe ich auch noch keine PowerShell Funktion genutzt.

Gehe ich richtig in der Annahme, dass du noch nie richtig mit Batch gearbeitet hast? Also quasi am besten alles auf dem Silbertablett serviert bekommen?

Bisschen eigenleistung wäre nicht schlecht.
60730
60730 08.02.2012 um 10:03:15 Uhr
Goto Top
moin,
Zitat von @LordXearo:
Bisschen eigenleistung wäre nicht schlecht.
eine Grußformel hätts auch getan....
Die Arbeitszeiten din generell 365 Tage im Jahr von 07:00 Uhr bis 22:00 Uhr im 4 Schichtbetrieb. von daher ist die Updatezeit begrenzt.
Naja -also ehrlich.... von 22:01 bis 6:59 ist massenhaft Zeit

Und einen hab ich noch - mal eben alle rauswerfen, weil man dringend was aktualisieren muß - von dem man nicht weiß ob das Update funktioniert....
Ohne Sicher stellen zu können, das Kollege x nicht grade vom MC Donalds kommt und mal eben Programm y anwirft - ohne zu wisssen, dass da grade....


Geht mit Batch, aber sowas ist nicht mein Bereich.

Gruß
Lousek
Lousek 08.02.2012 um 10:04:01 Uhr
Goto Top
Sali

Du könntest es auch mit pskill versuchen (schau dir mal die PsTools von SysInternals an).
Dort kannst du (wenn ich mich nicht irre) die Computer auch als Wildcard angeben, also \\*

Gruss
lousek
LordXearo
LordXearo 08.02.2012 um 10:04:09 Uhr
Goto Top
Also ohne Überprüfung und Abfragen von Fehlern kannst du es einfach so machen.

taskkill /S Client01 "evident.exe"  
taskkill /S Client02 "evident.exe"  

Schöner wäre es, die Clients in einer separaten txt Datei zu schreiben und davon zu lesen. Dann kannst du mittels Schleife immer eine Zeile einlesen und den Computernamen in einer Variable abspeichern. Die Variable benutzt du dann in deinem taskkill Befehl.
LordXearo
LordXearo 08.02.2012 um 10:09:24 Uhr
Goto Top
Danke für deinen Beitrag, das ist mir auch alles durch den Kopf gegangen.
Dentologicum
Dentologicum 08.02.2012 um 10:20:33 Uhr
Goto Top
Zitat von @LordXearo:
Ja mit Batch geht es auch, bisher habe ich auch noch keine PowerShell Funktion genutzt.

Gehe ich richtig in der Annahme, dass du noch nie richtig mit Batch gearbeitet hast? Also quasi am besten alles auf dem
Silbertablett serviert bekommen?

Bisschen eigenleistung wäre nicht schlecht.

Das habe ich so nicht gesagt und gemeint.....

NAtürlich ist Eigenleistung ein Teil dessen ich mir bewusst bin und auch bereit bin, nur ist der Anfang damit schwer einen guten aber auch produktiven Ansatz zu finden.
60730
60730 08.02.2012 um 10:26:50 Uhr
Goto Top
Zitat von @LordXearo:
Danke für deinen Beitrag, das ist mir auch alles durch den Kopf gegangen.

Und?
Dabei hast du doch sicher gemerkt, dass du dir ein Grab schaufelst?
Keine Ahnung, was die Software macht, wenn die einer beim patchen auf hat - bei irgendwas in einem Krankenhaus oder dort, wo es wirklich um Hopp oder Topp geht und nicht um so was popeliges, was meine Rechner/Kollegen veranstalten und es "nur" um Kohle geht - wenn ich selbst da schon meine Zweifel habe, dann hätte ich die an deiner Stelle in deiner Stelle erst recht.
Lochkartenstanzer
Lochkartenstanzer 08.02.2012 um 10:52:44 Uhr
Goto Top
Zitat von @60730:
> Zitat von @LordXearo:
> ----
> Die Arbeitszeiten din generell 365 Tage im Jahr von 07:00 Uhr bis 22:00 Uhr im 4 Schichtbetrieb. von daher ist die Updatezeit
begrenzt.
Naja -also ehrlich.... von 22:01 bis 6:59 ist massenhaft Zeit


Eben,

  • Anmeldezeit passend einstellen (Nach 22.00 keine Anmeldung mehr möglich).
  • Mit Shutdown per Holzhammer alle Clients runterfahren.
  • Updates einspielen
  • Wenn man nett ist, morgens um 7 die Clients wieder mit WOL hochfahren.

Mit ein bischen Übung kann man das sogar von zuhause vom Bett aus. face-smile

lks
Karo
Karo 08.02.2012 um 11:37:35 Uhr
Goto Top
Hoi,

gebe mal meinen Senf dazu, halte mich aber mal mit den hier geäußerten Bedenken zurück, denen ich mich jedoch anschließe.

Du solltest auch den zeitlichen Askpekt des Batchlaufes nicht ausgrenzen, wenn Du die Sachen hintereinander im Batch abfackelst. Da Du immer einen zeitlichen Verzug bei Taskkill, PSKILL, PSEXEC und Co hast kann das bei der Menge der Maschinen schon recht langwierig sein. Haust Du das Update erst dann drauf wenn alle Maschinen durch sind, kann das Programm an anderen schon wieder laufen. Also solltest Du parallel arbeiten.
Du könntest die Sachen allerdings auch per Scheduled Task auf den Maschinen abfackeln, die damit gleichzeitig loslaufen, bei dem die KILL-Batch auf einem Share liegt und damit flexibel für weitere Eingriffe angepasst werden können. Die Batch könnte z.B. auch eine Textdatei abarbeiten in denen die zu killenden Tasks abgelegt sind und und und ...

ach es gibt so viele Möglichkeiten.....

bye Karo
Lochkartenstanzer
Lochkartenstanzer 08.02.2012 um 11:48:17 Uhr
Goto Top
es kann dem TO auch blühen, daß jemand nachdem der Batch angelaufen ist, daherkommt und eine Kiste neu anwirft udn dort den Client startet, wie es schon beim "Broadcast" per Turnschuh auch schon der Fall ist.

Die einzig sichere Methode ist imho alle rauszuschmeißen und dafür zu sorgen, daß die nicht mehr reinkönnen, bevor das update erledigt ist. (siehe auch mein obiges posting).

lks
ricochico
ricochico 08.02.2012 um 11:49:04 Uhr
Goto Top
Hallo Dentologicum,

nur mal so als Ergängzung:
Ich würde vorher mit net send eine Nachricht an die User senden und sie benachrichtigen, dass Evident beendet werden muss für das Update am Server.
Das sie selbst das Evident beenden sollen oder es automatisch in 1 Minute geschlossen wird.
Dann kannst du Evident ja per taskkill beenden.

Bedenke aber, ob du damit nicht Datensätze oder sonstiges beschädigst, wenn du auf so vielen Rechner das geöffnete Programm so beendest.
Karo
Karo 08.02.2012 um 12:05:58 Uhr
Goto Top
guter Ansatz aber net send ist mehr als unzuverlässig und oftmals auch geblockt.

Karo