Jump to content

Batchskript zum domänenweiten beenden von Prozessen - eure Meinung


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

ich hatte heute mal eine etwas ruhigere Minute und konnte mich mit dem Thema Batch-Programmierung befassen.

 

Das Programm soll beliebige Prozesse in der Domäne beenden. Da das nicht auf jedem Gerät geschehen soll, will ich ein paar Ausnahmen machen. Nutzen werde das Skript ausschließlich ich, als Administrator des Geröllhaufens.

 

Ich bin blutiger Anfänger, was die Batch-Programmierung betrifft. Vielleicht habt ihr ja noch den einen oder anderen Tipp für mich, was ich ändern bzw. verbessern könnte, eben weil mir bewusst ist, dass mein Vorgehen manchmal umständlich ist. In den meisten Fällen funktioniert es aber. Ein bisschen habe ich mich auch von anderen inspirieren lassen, was die grobe Vorgehensweise betrifft. Anpassungen auf meinen Fall habe ich aber selbst vorgenommen. Scheinbar funktioniert das Skript, so wie es ist, auch schon mal.

 

Anbei mein Entwurf dazu:

@echo off
echo Bitte den Namen des zu beendenden Prozesses eingeben und mit ENTER bestaetigen:
echo.

set CompListeLang=%CD%\LOG_taskkill\taskkill_complistelang.txt
set CompListeKurz=%CD%\LOG_taskkill\taskkill_complistekurz.txt
set CompListe=%CD%\LOG_taskkill\taskkill_compliste.txt
set CompListeClean=%CD%\LOG_taskkill\taskkill_complisteclean.txt
set Logfile=%CD%\LOG_taskkill\taskkill_logfile.log

set /p Prozess=

chcp 1252 >nul

echo.>>%Logfile%
echo %date% %time% >>%Logfile%
echo Beendeter Prozess: %Nachricht% >>%Logfile%
echo Veranlasst von: %computername%\%username% >>%Logfile%
echo Prozess beendet auf folgenden Rechnern: >>%Logfile%

net view >%CompListeLang%

findstr \\ %CompListeLang% >%CompListeKurz%

for /f "tokens=1 delims=\\ " %%a in (%CompListeKurz%) do echo %%a >> %CompListe%

type %CompListe% | findstr /v Ausnahme1 | findstr /v Ausnahme2 | findstr /v Ausnahme3 | findstr /v Ausnahme4 | findstr /v Ausnahme5 > %CompListeClean%  

for /f %%y in (%CompListeClean%) do (
		taskkill /f /im %Prozess% /s \\%%y
		echo %%y >>%Logfile%
)

echo.
echo Prozess %Prozess% beendet. Programm mit beliebiger Taste beenden.
echo.

del %CompListeLang%
del %CompListeKurz%
del %CompListeClean%
del %CompListe%

chcp 850 >nul

pause

Grüße

bearbeitet von willy-goergen
Link zu diesem Kommentar

Moin moin,

 

Du bist darüber im Klaren, die Browserlist gezeigt mit net view muss nicht aktuell sein? Es können Rechner gestartet sein aber aktuell noch nicht in der Liste geführt, oder es werden noch Rechner geführt, die bereits heruntergefahren sind oder neu starten. Ein Aktualisieren der Liste des Masterbrowsers dauert wohl bis zu 13 Minuten.

 

Ansonsten musst Du selbst testen, ob es funktioniert, ob es sich bewährt, deine Wünsche erfüllt.

 

Neugierige Frage, warum brauchst Du so etwas?

bearbeitet von lefg
Link zu diesem Kommentar

Du bist darüber im Klaren, die Browserlist gezeigt mit net view muss nicht aktuell sein? Es können Rechner gestartet sein aber aktuell noch nicht in der Liste geführt, oder es werden noch Rechner geführt, die bereits heruntergefahren sind oder neu starten. Ein Aktualisieren der Liste des Masterbrowsers dauert wohl bis zu 13 Minuten.

 

Ansonsten musst Du selbst testen, ob es funktioniert, ob es sich bewährt, deine Wünsche erfüllt.

 

Neugierige Frage, warum brauchst Du so etwas?

 

Ich weiß, über diese Macke bin ich mir im Klaren. Das ist einer der Gründe, weshalb das ausschließlich für meine eigene Verwendung sein wird. Jemand unbedarftes hat bei der darauf anschließenden Fehlermeldung vielleicht das Gefühl, er hätte was verkehrt gemacht.

 

Aber weil du es gerade ansprichst. An welcher Stelle wird der "Masterbrowser" aktualisiert? Macht das einer der Domänencontroller?

 

 

 

Neugierige Frage, warum brauchst Du so etwas?

 

 

Ich würde das gerne wegen unserem ERP-System nutzen. Maßgabe der Entwickler ist, dass ich, als verantwortliche Person, jeden Rechner einzeln in der Firma dahingehend überprüfen müsste, ob das Programm auch beendet ist. Und wenn ich an dem einen Ende fertig bin, kann ich nochmal von vorne anfangen. Abgesehen davon, dass das nicht wirklich praktikabel ist. (meine Meinung)

Der Fall würde z.B. eintreten, wenn bestimmte Module des Programms aktualisiert werden müssten oder ich den betreffenden Server mit einer SQL-Datenbank neu starten müsste.

Etwas Vorsicht ist wohl nicht unangebracht. Zusätzlich bringen es die Entwickler bis heute nicht fertig eine entsprechende Fehlerbehandlung für diesen Fall mit zu integrieren. Es wird lediglich beim Start eines Programmmoduls überprüft, ob die SQL-Datenbank verfügbar ist. Danach nicht mehr. Angeblich ginge das wohl auch nicht anders...

 

Das Ganze ist für mich eher zur Absicherung, weil damit auch keine Fehlermeldungen mehr in den Logfiles des ERP-Programms auftauchen, über die man dann im Anschluss wieder Ewigkeiten diskutieren muss.

bearbeitet von willy-goergen
Link zu diesem Kommentar

Meist wird  der Dienst Computerbrowser des ersten sich allein im Netzwerk findenden Rechners Masterbrowser, er erklärt sich dazu. Ist es nicht so eindeutig, dann wählen die Computer sich einen aus ihrer Mitte zum Masterbrowser. Allerdings ist es in ServerClient-Systemen ja meist so, der Server ist immer an, er wird also Masterbrowser. In einem Domänennetzwerk ist es dann ein DC oder der DC. In solch einem Fall kann man die Browserdienste der Clients deaktivieren, die neigen zum Schwätzen und erzeugen Broadcast.

 

Die Massgabe der Entwickler erscheint mir doch überheblich, ob die das externen Kunden auch so vorgäben?

bearbeitet von lefg
Link zu diesem Kommentar

Die Massgabe der Entwickler erscheint mir doch überheblich, ob die das externen Kunden auch so vorgäben?

 

Wir / ich / die Firma, für ich arbeite, sind die externen Kunden.

 

Deswegen hatte ich ja auch schon ziemlich böse Auseinandersetzungen mit den Entwicklern. Am liebsten hätten sie wohl auch hingeschmissen, weil ich auf solche Vorgaben entsprechend reagiert habe.

 

Irgendwie muss man aber wohl diplomatisch bleiben. Von daher stelle ich diverse Überlegungen an, wie ich bestimmt bleiben kann, ohne zu sehr Druck auszuüben... 

Link zu diesem Kommentar

Hallo,

 

um wieviele Rechner handelt es sich denn, auf welchem der ERP Client genutzt wird?

Wäre es ggf. eine Überlegung wert, dies ggf. über eine lokale Aufgabe am Client prüfen zu lassen?

Sprich:

 - Am Client läuft periodisch eine Batchdatei, welche (z.B.) in einem bestimmten Ordner eine Datei sucht (wie z.B. UPDATE.AKTIV)

 - Ist die Datei vorhanden, wird lokal geprüft, ob der von dir gesuchte Prozess aktiv ist. Wenn ja, dann beenden.

 - Wird die gesuchte Datei nicht gefunden, wird nichts unternommen.

 - Ist das Update durch, benennst du die Datei "UPDATE.AKTIV" um (oder löscht sie) und alles läuft wieder normal.

 

Nur so als Gedanke ...

 

Noch kurz zum ERP-System:

Ich hatte bis dato mehrere ERP-Systeme produktiv "zwischen den Fingern" und bei jedem gab es eine (administrative!) Funktion, indem man sofort auslesen konnte, wer jetzt gerade im System eingeloggt ist - u.a. auch wegen dem von dir genannten Punkt hinsichtlich Updates.

Diese Funktion ist aus meiner Sicht ein administratives Minimum für ein ERP-System (egal welcher Größe).

Ich kenne selbst kleine OpenSource ERP-Systeme, welche eine solche Option bieten.

Über diese Anzeige der noch aktiven ERP-User kann man dann gezielt die User ansteuern / ansprechen / vom System kicken ...

 

Sprich dies vll. mal mit der Entwicklerin ab, sollte eine solche Funktion noch nicht vorhanden sein.

 

Gruß Sebastian

Link zu diesem Kommentar

Hi,

 

da Ihr euch mit dem ERP Hersteller scheinbar nicht ganz "grün" seid, solltest du dir das Vorgehen vielleicht von denen als unbedenklich absegnen lassen. Sollte es später zu Problemen kommen und es kommt raus, dass du die Prozesse einfach nur abschießt, wird der Hersteller den Fehler vermutlich genau darauf zurückführen ;)

 

Das ganze ließe sich mit der Powershell / PowerShell-Remoting vermutlich einfacher lösen.

 

Gruß

Jan

Link zu diesem Kommentar

Moin,

 

die Browserliste kann auch schon mal über eine Stunde brauchen, bis sie einigermaßen aktuell ist. Du wirst sie aber doch auch gar nicht brauchen - die Liste der Rechner dürfte doch ziemlich statisch sein, oder? Also einmal anlegen, fertig. Bei Bedarf manuell aktualisieren.

 

Die Lösung mit dem lokal laufenden Skript und der Flag-Datei fände ich auch besser.

 

Gruß, Nils

Link zu diesem Kommentar

Sorry, bin heute auch schon ein bisschen durch. Ich probiere einfach mal entsprechend auf eure Antworten einzugehen.

 

...

um wieviele Rechner handelt es sich denn, auf welchem der ERP Client genutzt wird?

Wäre es ggf. eine Überlegung wert, dies ggf. über eine lokale Aufgabe am Client prüfen zu lassen?

...

 

Es sind um die 30 Rechner.

Dein Gedanke ist nicht schlecht. Das Problem mit dem Beenden des Prozesses liegt hier:

 

 

... Sollte es später zu Problemen kommen und es kommt raus, dass du die Prozesse einfach nur abschießt, wird der Hersteller den Fehler vermutlich genau darauf zurückführen ;)

 

 

Ich kann den Prozess, nach meinem jetzigen Wissensstand, nicht einfach so beenden. Ich muss ihn quasi abschießen. Der kleine Parameter "/f" ist genau deswegen da. Ansonsten schließt sich das Programm nicht zuverlässig.

Prinzipiell habe ich mein Vorgehen mit den Entwicklern auch schon abgesprochen. Es wurde so für gut befunden. Dass ich das Beenden des Prozesses erzwinge, habe ich nicht erwähnt vergessen zu erwähnen.

 

Die Alternativen dazu sind aber auch spärlich. Ich finde es absolut schwachsinnig durch die ganze Firma zu laufen und zu überprüfen, ob das Programm an fraglichen Rechnern überall geschlossen ist. Das ist bei der Größe der Firma auch kaum machbar und nicht zielführend. Zumindest sehe ich sowas nicht als meine Aufgabe an.

 

Oder habe ich jetzt etwas falsch verstanden? 

 

 

...

die Browserliste kann auch schon mal über eine Stunde brauchen, bis sie einigermaßen aktuell ist. Du wirst sie aber doch auch gar nicht brauchen - die Liste der Rechner dürfte doch ziemlich statisch sein, oder? Also einmal anlegen, fertig. Bei Bedarf manuell aktualisieren.

 

Die Lösung mit dem lokal laufenden Skript und der Flag-Datei fände ich auch besser.

 

 

Die Idee mit der statischen Liste finde ich gut. :)

Bei dem anderen Punkt bin ich mir allerdings noch nicht ganz so sicher.

bearbeitet von willy-goergen
Link zu diesem Kommentar

Ich würde das gerne wegen unserem ERP-System nutzen. Maßgabe der Entwickler ist, dass ich, als verantwortliche Person, jeden Rechner einzeln in der Firma dahingehend überprüfen müsste, ob das Programm auch beendet ist. Und wenn ich an dem einen Ende fertig bin, kann ich nochmal von vorne anfangen. Abgesehen davon, dass das nicht wirklich praktikabel ist.

Weshalb muss man das im laufenden Betrieb machen?

 

die Entwickler bis heute nicht fertig eine entsprechende Fehlerbehandlung für diesen Fall mit zu integrieren. Es wird lediglich beim Start eines Programmmoduls überprüft, ob die SQL-Datenbank verfügbar ist. Danach nicht mehr. Angeblich ginge das wohl auch nicht anders...

Ich kenne das Programm und den Source Code nicht, aber IMHO ist das möglich so eine Prüfung einzubauen. Sicherlich mit Aufwand und viel testen verbunden, aber IMHO möglich.

Link zu diesem Kommentar

BTW: Mit PowerShel kannst Du Dir das Leben viel einfacher machen. Kombiniere einfach Windows PowerShell Tip of the Week - Running Windows PowerShell Scripts Against Multiple Computers mit Verwenden des Cmdlet "Stop-Process". Das passt vermutlich in einen Einzeiler, wen Du die Liste der Computer einer Textdatei entnimmst.

 

Have fun!
Daniel

Link zu diesem Kommentar

 

ch würde das gerne wegen unserem ERP-System nutzen. Maßgabe der Entwickler ist, dass ich, als verantwortliche Person, jeden Rechner einzeln in der Firma dahingehend überprüfen müsste, ob das Programm auch beendet ist. Und wenn ich an dem einen Ende fertig bin, kann ich nochmal von vorne anfangen. Abgesehen davon, dass das nicht wirklich praktikabel ist. (meine Meinung)

 

Das halte ich auch nicht für praktikabel, nicht nur in diesem Fall, man stelle sich einen Kunden vor, bei dem es keinen Admin im Hause gibt. Müsste der Kunde dann auf seine Kosten einen anderen Dienstleister kommen lassen? Mir erscheint das ziemlich abwegig.

 

Und dann nimmt der DB-Entwickler deine für ihn kostenlose Dienstleistung in Anspruch? Das erscheint mir auf dem ersten Blick auch abwegig. Oder sieht die Geschichte doch etwas anders aus? Entwickeln die eure Datenbank in eurem Auftrag oder bezahlt ihr für ein Produkt, Updates und Service? Wir haben/hatten mal ein ähnliche erscheindes Problem, Updaten nach Neustart des Rechners, dann war des Setup des DB Client start- und die Updates herunterladbar. Das führte natürlich zu Problemen bei den Benutzern und Konfikten mit ihnen. Die Benutzer wollen sich nicht mit Problemen von Updates befassen, das sollen sie auch nicht, die Benutzer sollen Kunden betreuen und Einnahmen generieren. Neustarts von Rechnern, Störungen jeglicher Art sind unerwünscht.

Link zu diesem Kommentar

Weshalb muss man das im laufenden Betrieb machen?

 

 

Ich kenne das Programm und den Source Code nicht, aber IMHO ist das möglich so eine Prüfung einzubauen. Sicherlich mit Aufwand und viel testen verbunden, aber IMHO möglich.

 

Ich mache die Aktualisierungen meistens schon Abends, wenn eh nicht mehr viele Leute im Haus sind.

Es stehen Rechner in Räumen, für die ich keinen Schlüssel habe, aber eventuell haben sollte. (andere Baustelle...)

Dort laufen die Rechner (unsinnigerweise) teils einfach durch.

Ebenso ist das in der Produktion an Rechnern der Fall, die für die Rückmeldung bearbeiteter Aufträge genutzt werden. Die werden auch nachts noch genutzt.

 

Genau um diese Rechner geht es. Generell sollte ich nach Möglichkeit einmal durch die Firma laufen und alles überprüfen.

 

Der andere Punkt spielt in mein Thema von letztens mit rein. Da hattest du ja auch schon was dazu geschrieben. Wusste nur nicht so recht, wo ich es reinstecken soll.

Die Entwickler des ERP-Systems haben momentan absolut keine Ahnung, wie so eine Überprüfung zu realisieren wäre. Angeblich würde eine SQL-Datenbank auch keine solche Möglichkeit haben. Zwischenzeitlich habe ich eine Vorgabe mit Deadline gemacht.

Außerdem habe ich mit einem Entwickler einer anderen Firma gesprochen, der Software mit SQL-Datenbanken im Hintergrund entwickelt. Die sind bei uns gerade zufällig im Haus und führen eine Modernisierung durch. Als ich ihm das erzählt habe, meinte er nur, als Entwickler müssten die eigentlich wissen, wie das geht. Er hat in seiner Software, die er bei uns installiert, jedenfalls eine solche Fehlerbehandlung drin.

 

 

BTW: Mit PowerShel kannst Du Dir das Leben viel einfacher machen. Kombiniere einfach Windows PowerShell Tip of the Week - Running Windows PowerShell Scripts Against Multiple Computers mit Verwenden des Cmdlet "Stop-Process". Das passt vermutlich in einen Einzeiler, wen Du die Liste der Computer einer Textdatei entnimmst.

 

Have fun!

Daniel

Danke für den Tipp! Das schaue ich mir mal an. :)

 

 

Das halte ich auch nicht für praktikabel, nicht nur in diesem Fall, man stelle sich einen Kunden vor, bei dem es keinen Admin im Hause gibt. Müsste der Kunde dann auf seine Kosten einen anderen Dienstleister kommen lassen? Mir erscheint das ziemlich abwegig.

 

Und dann nimmt der DB-Entwickler deine für ihn kostenlose Dienstleistung in Anspruch? Das erscheint mir auf dem ersten Blick auch abwegig. Oder sieht die Geschichte doch etwas anders aus? Entwickeln die eure Datenbank in eurem Auftrag oder bezahlt ihr für ein Produkt, Updates und Service? Wir haben/hatten mal ein ähnliche erscheindes Problem, Updaten nach Neustart des Rechners, dann war des Setup des DB Client start- und die Updates herunterladbar. Das führte natürlich zu Problemen bei den Benutzern und Konfikten mit ihnen. Die Benutzer wollen sich nicht mit Problemen von Updates befassen, das sollen sie auch nicht, die Benutzer sollen Kunden betreuen und Einnahmen generieren. Neustarts von Rechnern, Störungen jeglicher Art sind unerwünscht.

 

Die Firma, für die ich arbeite, hat schon lange für das Produkt bezahlt. Es wurde ein ERP-System mit MS SQL-Datenbank (die 2008er R2 Express-Variante, um ganz genau zu sein) gekauft. Nichts speziell auf die Firma angepasstes, zumindest datenbankseitig. 

 

Zusätzlich läuft nebenher noch ein Wartungsvertrag, in dem wir monatlich einen Betrag im unteren vierstelligen Bereich für die Pflege der Software abdrücken.

 

Ich sehe auch immer wieder, dass probiert wird, Arbeiten, die (meine ich) der Entwickler machen müsste, auf uns abzuwälzen. Das ist kein Einzelfall. Sagen wir mal so: In diesem Fall geht betrifft es halt nur mich. 

bearbeitet von willy-goergen
Link zu diesem Kommentar

Ich mache die Aktualisierungen meistens schon Abends, wenn eh nicht mehr viele Leute im Haus sind.

Es stehen Rechner in Räumen, für die ich keinen Schlüssel habe, aber eventuell haben sollte. (andere Baustelle...)

Dort laufen die Rechner (unsinnigerweise) teils einfach durch.

Ebenso ist das in der Produktion an Rechnern der Fall, die für die Rückmeldung bearbeiteter Aufträge genutzt werden. Die werden auch nachts noch genutzt.

Da würde ich persönlich lieber die Rechner mit Hilfe PSEXEC.EXE abschalten, die man abschalten kann. Bei den anderen manuell prüfen oder den Prozess killen.

 

Der andere Punkt spielt in mein Thema von letztens mit rein. Da hattest du ja auch schon was dazu geschrieben. Wusste nur nicht so recht, wo ich es reinstecken soll.

Die Entwickler des ERP-Systems haben momentan absolut keine Ahnung, wie so eine Überprüfung zu realisieren wäre. Angeblich würde eine SQL-Datenbank auch keine solche Möglichkeit haben. Zwischenzeitlich habe ich eine Vorgabe mit Deadline gemacht.

In http://www.gssg.de/visbas.htm#vbnet http://www.gssg.de/net_sqlsrv00.htm zeigt der Entwickler man das machen kann. IsOpen ist die Funktion zum prüfen.

 

BTW: Mit der kostenlosen Visual Studio Community Edition 2013 kannst Du so etwas auch selbst ausführen und prüfen.

 

 

Ob das etwas mit einer datenbank zu tun hat? Ich meine, das ist Sache des Setup.

Nein, das ist Sache vom Frontend. Bei jedem Datenbankzugriff muss getestet werden, ob der Zugriff besteht, wenn nein, versuchen zu öffnen. Schlägt das fehl, Info an Benutzer und evtl. nicht gespeicherte Daten ins Dateisystem speichern lassen.

bearbeitet von Sunny61
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...