Batch - Programmierung

Diskutiere Batch - Programmierung im Programmierung Forum im Bereich Software Forum; Hallo zusammen, in der Hoffnung das richtige Forum erwischt zu haben, erhoffe ich mir etwas Hilfe zu meinem folgenden Problem. Ich möchte auf...
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
Hallo zusammen,

in der Hoffnung das richtige Forum erwischt zu haben, erhoffe ich mir etwas Hilfe zu meinem folgenden Problem.
Ich möchte auf einem PC1 eine *.bat (Bedingung) ausführen. Diese Batch-Datei soll mehrere *.exe Dateien auf diversen Netzwerkrechnern PC2, PC3.. starten. Die *.exe Datei kann in verschiedenen Modi laufen, A, B, C.. Beispiel: test.exe A

Wenn ich jetzt die Batch-Datei auf PC1 mit folgender Zeile ausführe:
\\PC2\test\test.exe
, dann führt er mir die *.exe auf dem lokalen Rechner, sprich PC1 aus, und nicht auf dem Netzwerkrechner PC2...
Wie kriege ich das richtig gebogen?

Gruss
 
R

Ronny

SPONSOREN
Mitglied seit
07.08.2004
Beiträge
12.311
Standort
Rheinland
Evtl. mal die einzelnen Programme mit CALL aufrufen, also

call prog1.exe
call prog2.exe

usw.
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Ich glaube nicht, dass sich sowas dann über normale Batchfiles oder Skripts lösen lässt.

Damit die Anwendung auf PC2 geöffnet wird, muss dieser die Anwendung starten. Dazu brauchst du ein Netzwerkprogramm oder besser einen NT-Dienst...kA ob du dich da auskennst... :nixweis

Es gäbe noch die ziemlich umständliche Lösung, dass du auf PC2 auch eine Batch laufen hast, die überprüft ob eine bestimte Datei vorhanden ist. Ist dass der Fall könnte sie für PC1 die Anwendung starten. Diese Datei sollte halt dann von PC1 erstellt werden. Dafür bräuchtest du einen SLEEP-Befehl auf PC2, sonst lässt sich die Dateiüberprüfung nicht realisieren.

Was wolltest du eigentlich mit der Batch machen? Vielleicht liese sich alles anders realisieren.
 
BrandyJr

BrandyJr

Mitglied seit
02.11.2003
Beiträge
3.707
Alter
38
Standort
Berlin
Naja, das lässt sich mit PsExec realisieren (laut Beschreibung, habs nie Probiert)
Dafür müssen aber auf dem Remote-PC die Administrative-Shares aktiviert sein soweit ich mich errinnere
 
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
Danke schon einmal für die Antworten..

Also mit NT-Diensten kenne ich mich weniger aus.. Eine Batch-Datei, die dann die *.exe aufruft, auf dem anderen Rechner habe ich auch versucht. Nur mit gleichem Ergebnis. Allerdings weniger komplex, sondern wieder nur der 1-Zeiler...
Wie könnte denn die Batch mit sleep-Befehl aussehen?

Hat das eventuell jemand mit psexec schon probiert.?. Also aus diesen angegebnen Syntaxen habe ich das nicht hinbekommen... Bzw das Hauptproblem war, dass die *.exe mit verschienden Modi aufgerufen werden kann.. Z.B test.exe A
... Mit psexec kam die Fehlermeldung, dass test.e.exe einen Fehler verursacht hat.. Ich denke mal er kommt nicht parat mit der Syntax...

Gruss und Danke
 
BrandyJr

BrandyJr

Mitglied seit
02.11.2003
Beiträge
3.707
Alter
38
Standort
Berlin
Na dann solltest du uns wie Diablo schon sagte mehr Infos geben. :D
Hat das Programm eine GUI? Oder soll das nur was ausführen und verschwindet dann wieder wortlos?
Befindet sich das Programm auf dem Remote-Rechner oder nur lokal?

Weil mit na cmd auf dem remote-rechner rumwurschteln, obwohl ich auf dem lokalen Rechner bin hab ich ebend ganz simpel hinbekommen...
 
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
Ok, auf dem lokalen Rechner existiert eine Software, die in bestimmten Fällen eine batch-Datei anstossen soll (das programm kann aber wohl noch eine *.exe direkt ansprechen, aber die Programmierung so einer liegt mir noch fern).
Die Batch-Datei soll im Netzwerk auf 2-3 Rechnern ein *.exe anstossen die eine Software beendet. An der exe selber kommt man nicht dran vorbei noch ist der quellcode bekannt :-)..

So sieht das Szenario aus...

Gruss
 
DiableNoir

DiableNoir

Mitglied seit
18.01.2004
Beiträge
6.069
Hättest du das nur vorher erwähnt....Wenn du XP verwendest kannst du den TASKKILL-Befehl verwenden. (Funktioniert auf Remote; Keine Ahnung ob es ihn auch unter Windows 2000 gibt.)

Code:
TASKKILL [/S System [/U Benutzername [/P [Kennwort]]]]
     { [/FI Filter] [/PID Prozesskennung | /IM Abbildname] } [/F] [/T]

Beschreibung:
  Dieses Befehlszeilenprogramm dient zum Beenden von einem oder
  mehrere Prozesse.
  Prozesse können über die Prozesskennung oder den Abbildnamen beendet
  werden.

Parameterliste:
  /S  System       Remotesystem für die Verbindungsherstellung.
  /U  [Domäne\]Benutzer  Bestimmt den Benutzerkontext, unter dem
               der Befehl ausgeführt wird.
  /P  [Kennwort]     Bestimmt das Kennwort für den Benutzerkontext.
               Auslassung fordert zur Kennworteingabe auf.
  /F            Erzwingt das Beenden des Prozesses.

  /FI  Filter       Zeigt einen Satz von Tasks an, der mit vom
               Filter festgelegten Kriterien übereinstimmt.
  /PID Prozesskennung   Bestimmt die Prozesskennung des Prozesses,
               der beendet werden muss.
  /IM  Abbildname     Bestimmt den Abbildnamen des Prozesses,
               der beendet werden soll. Durch "*"
               werden alle Abbildnamen verwendet.
  /T            Strukturabbruch: Beendet den angegebenen
               Prozess und dessen untergeordnete Prozesse.
  /?            Zeigt diese Hilfemeldung an.

Filter:
  Filtername  Gültige Operatoren    Gültige Werte
  -----------  ------------------    -------------
  STATUS    eq, ne          RUNNING | NOT RESPONDING
  IMAGENAME   eq, ne          Beliebige gültige Zeichenfolge.
  PID      eq, ne, gt, lt, ge, le  Prozesskennungswert
  SESSION    eq, ne, gt, lt, ge, le  Sitzungsnummer
  CPUTIME    eq, ne, gt, lt, ge, le  CPU-Zeit im Format:
                      hh:mm:ss.
                      hh - Stunden,
                      mm - Minuten, ss - Sekunden
  MEMUSAGE   eq, ne, gt, lt, ge, le  Speicherverwendung (KB)
  USERNAME   eq, ne          Benutzername im Format:
                      [Domäne]\Benutzername
  MODULES    eq, ne          DLL-Name
  SERVICES   eq, ne          Dienstname
  WINDOWTITLE  eq, ne          Fenstertitel

HINWEIS: Der Platzhalter "*" für die Option /IM kann nur mit Filtern verwendet
     werden.

HINWEIS: Das Beenden von Remoteprozessen wird immer erzwungen,
     unabhängig davon, ob die Option /F angegeben wird.

Beispiele:
  TASKKILL /S System /F /IM notepad.exe /T
  TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
  TASKKILL /F /IM notepad.exe /IM mspaint.exe
  TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne unbenan*"
  TASKLIST /F /FI "USERNAME ne NT-AUTORITÄT\SYSTEM" /IM notepad.exe
  TASKKILL /S System /U Domäne\Benutzername /FI "USERNAME ne NT*" /IM *
  TASKKILL /S System /U Benutzername /P Kennwort /FI "IMAGENAME eq note*"
Ich glaube die Beispiele sagen schon alles. :cool
 
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
Die *.exe muss ausgeführt, weil es sich um eine komplexere Datenbankanwendung handelt. Wenn die nicht sauber runtergefahren wird, was mit der *.exe wohl gewährleistst wird, ist der Datenbestand "gefährdet".. Also den Prozess einfach killen, ist leider nicht...
 
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
Kann ich eine telnet-session per Scripting durchführen??

Dann wäre das Propblem gelöst..

Also wie kriege ich eine Telnet session als *bat (wohl weniger) oder *.exe verfasst??

z.B.

telnet ip
login :test
password: test

c:\test\test.bat

Wenn das gehen würde und mir einer helfen könnte..??

:danke
 
A

Alith

Mitglied seit
10.08.2004
Beiträge
135
Sorry wenn ich jetzt was falsch verstehe, aber kannst du nicht mit der Batchdatei eine Batchdatei auf dem Zielrechner starten? Die Datei auf dem Zielrechner führt dann die *.exe aus.

Alith
 
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
wenn mir einer sagt, wie das funktioniert, dass die *.exe auch auf dem Remote-Rechner ausgeführt wird und nciht lokal wo ich die erste Batch anstosse, dann wäre ja gut.. ;-)


Aber eine andere Frage.. Ich möchte die Batch per Taskplaner beim neustart starten, und dann so lange laufen lassen, bis ein Ereignis eingetreten ist.
Wie kann ich das in der Batch realisieren?

Gruss
 
M

Mial

Mitglied seit
14.07.2004
Beiträge
2.132
Firsttime wrote schrieb:
... Ich möchte auf einem PC1 eine *.bat (Bedingung) ausführen. Diese Batch-Datei soll mehrere *.exe Dateien auf diversen Netzwerkrechnern PC2, PC3.. starten. Die *.exe Datei kann in verschiedenen Modi laufen, A, B, C.. Beispiel: test.exe A

Wenn ich jetzt die Batch-Datei auf PC1 mit folgender Zeile ausführe:
\\PC2\test\test.exe
, dann führt er mir die *.exe auf dem lokalen Rechner, sprich PC1 aus, und nicht auf dem Netzwerkrechner PC2...
Wie kriege ich das richtig gebogen? ...
Hi Firsttime


ich gehe mal davon aus, das du zumindest XP oder vergleichbar einsetzt ... nicht 9x ...

dann kannst du ganz einfach mit einem Kommandozeilenbefehl das gewünschte ausführen ...


ein Command / DOS Fenster (cmd.exe) oeffnen und folgenden Befehl manuell eingeben oder besser, in eine Batchdatei schreiben (flexibel z.B. mit Parametereingabe/uebergabe) und anklicken / aufrufen ...


wmic.exe /node:'RechnerA','RechnerB','RechnerC',... process call create "Auftrag"


'RechnerX' - Name oder IP des / der Zielrechner, auf denen der Prozeß gestartet werden soll (Anführungszeichen NICHT mit eingeben; KEINE Leerzeichen oder Sonderzeichen im Namen bitte !)

"Auftrag" - Programm das ausgeführt werden soll. Liegt es nicht im jeweiligen Path muß der gesamte Pfad angegeben werden. (Anführungszeichen unbedingt mit eingeben)


das Programm wird nicht interaktiv gestartet. Ein evtl. Anwendungsfenster bleibt unsichtbar. Es ist keine Eingabe durch den Benutzer möglich. Der Remote-Start macht nur Sinn bei Programmen, die eigenständig (ohne Benutzereingaben) ihre Arbeit aufnehmen bzw. ohnehin resident im Hintergrund laufen.


Um ein Programm ordnungsgemäß zu stoppen (also nicht einfach nur zu killen :D ) lautet der Befehl ...


wmic.exe /node:'RechnerA','RechnerB','RechnerC',... process where "name='Auftrag'" call terminate

"name='Auftrag'" - Auftrag - Programm das beendet werden soll. (Anführungszeichen " + ' bitte mit eingeben) z.B. "name='iexplore.exe'" um ALLE Instanzen des Internetexplorer zu schließen ...



Das M$ Tool wmic.exe ist normal ab SP2 auf dem Rechner vorhanden. Es kann aber auch nachinstalliert werden ... es funktioniert unter Win XP und 2003 ... 2K hab' ich nicht, deshalb auch nicht gecheckt ... sollte aber auch gehen ... ob es auch unter 9x installiert / zum laufen gebracht werden kann ... :nixweis ... hab' ich aber auch noch nicht probiert ...

alle möglichen Aufrufe und Parameter lassen sich wie ueblich mit Eingabe von wmic.exe -? bzw. wmic.exe /? abrufen / anzeigen ...


Nachinstallation der erforderlichen Dateien aus dem SP2 fuer wmic(.exe) unter XP / 2003 ...

folgende 20 (M$-Cabinet-)Dateien müssen aus dem Verzeichnis I386 von XP SP2 ins Verzeichnis %windir%/system32/wbem/ expandiert (entpackt) werden ...

cimwin32.mf_
cimwin32.mo_
cli.mo_
cliegali.mf_
cliegali.mo_
csv.xs_
hform.xs_
htable.xs_
mof.xs_
policman.dl_
provthrd.dl_
rawxml.xs_
rsop.mo_
texttbl.xs_
textvalu.xs_
wmic.ex_
wmicookr.dl_
wscenter.mo_
xml.xs_
xslmap.xm_


das kann man z.B. einfach per Batch-file machen ...


Code:
@echo off

expand.exe "X:\SP2\I386\cimwin32.mf_" "%windir%\system32\wbem\cimwin32.mfl"

expand.exe "X:\SP2\I386\cimwin32.mo_" "%windir%\system32\wbem\cimwin32.mof"

expand.exe "X:\SP2\I386\cli.mo_" "%windir%\system32\wbem\cli.mof"

expand.exe "X:\SP2\I386\cliegali.mf_" "%windir%\system32\wbem\cliegaliases.mfl"

expand.exe "X:\SP2\I386\cliegali.mo_" "%windir%\system32\wbem\cliegaliases.mof"

expand.exe "X:\SP2\I386\csv.xs_" "%windir%\system32\wbem\csv.xsl"

expand.exe "X:\SP2\I386\hform.xs_" "%windir%\system32\wbem\hform.xsl"

expand.exe "X:\SP2\I386\htable.xs_" "%windir%\system32\wbem\htable.xsl"

expand.exe "X:\SP2\I386\mof.xs_" "%windir%\system32\wbem\mof.xsl"

expand.exe "X:\SP2\I386\policman.dl_" "%windir%\system32\wbem\policman.dll"

expand.exe "X:\SP2\I386\provthrd.dl_" "%windir%\system32\wbem\provthrd.dll"

expand.exe "X:\SP2\I386\rawxml.xs_" "%windir%\system32\wbem\rawxml.xsl"

expand.exe "X:\SP2\I386\rsop.mo_" "%windir%\system32\wbem\rsop.mof"

expand.exe "X:\SP2\I386\texttbl.xs_" "%windir%\system32\wbem\texttable.xsl"

expand.exe "X:\SP2\I386\textvalu.xs_" "%windir%\system32\wbem\textvaluelist.xsl"

expand.exe "X:\SP2\I386\wmic.ex_" "%windir%\system32\wbem\wmic.exe"

expand.exe "X:\SP2\I386\wmicookr.dl_" "%windir%\system32\wbem\wmicookr.dll"

expand.exe "X:\SP2\I386\wscenter.mo_" "%windir%\system32\wbem\wscenter.mof"

expand.exe "X:\SP2\I386\xml.xs_" "%windir%\system32\wbem\xml.xsl"

expand.exe "X:\SP2\I386\xslmap.xm_" "%windir%\system32\wbem\xsl-mappings.xml"

echo ok - ready ...

WMI steht uebrigens fuer Windows Management Instrumentation ...
das C in wmic.exe vermutlich fuer command oder console ...


cu
:cool
m,-


ps - der SP2 Pfad X:\SP2\I386 muß in der Batch natuerlich ggf. angepaßt werden ...
 
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
Danke für das Posting! Das hört sich doch mal interessant an.

Werde ich ausprobieren. Habe W2k, aber ich denke und hoffe, dass es da auch so läuft..

Gruss
Firsttime

1. P.S. Kurz zu einem anderen Gedanken. Gibt es eine Möglichkeit eine Telnet-Session per script automatisch ablaufen zu lassen?

2. P.S. Gibt es die sleep.exe (Verzögerung in Batch-Dateien) auf der W2k CD?
 
F

Firsttime

Threadstarter
Mitglied seit
19.06.2005
Beiträge
18
Hi,

also nochmal zurück zu wmic.exe..

Das klappt soweit, aber dann wird wieder eine Fehlermeldung ausgegeben...

test.e.exe einen Fehler verursacht hat, ein Fehlerprotokoll wird erstellt.. Ich denke mal er kommt nicht parat mit der Syntax...

Im Ereignisprotokoll wird der Fehler nicht geloggt.. Gibt es unter Windows 2000 noch woanders Logs??

Oder gibt es eine Möglichkeit einen geplanten Task erst auszuführen, wenn dieser mit einer, z.B., *.bat angestossen wird??


Gruss
 
L

leoric

Mitglied seit
20.04.2007
Beiträge
17
hallo

\\PC2\test\test.exe
also, soweit ich weiß reicht es doch nur aus dahinter das ziel zu schreiben, quasi die ip (weiß jetz nich so genau ob auch der computernamen geht. ich mach es nur mit ip) sieht ungefähr so aus:

\\PC2\test\test.exe /192.168.1.2 (je nachdem welche ip der computer hat auf dem es geschehen soll)

so müsste es gehn... hoffentlich ;)


ohh. is ja schon n weilchen her, seh ich grad. na dann hat sich das mit sicherheit schon erledigt :D
 
H

hacklschorsch

Mitglied seit
09.03.2004
Beiträge
1.177
Naja, das lässt sich mit PsExec realisieren (laut Beschreibung, habs nie Probiert)
Dafür müssen aber auf dem Remote-PC die Administrative-Shares aktiviert sein soweit ich mich errinnere
PsExec ist das ideale für dich, denn da kannst direkt auf dem remote pc programme starten oder ausführen.
 
X

XP_User

Mitglied seit
28.03.2007
Beiträge
248
Alter
39
Hoste mal die komplette Bat-Datei
 
Thema:

Batch - Programmierung

Batch - Programmierung - Ähnliche Themen

  • Ich finde meinen Fehler

    Ich finde meinen Fehler: Bin grade bei der Entschlüsselung und immer kommt genau das gleiche bei Raus habt ihr nen Plan wo der Fehler ist FOR /F "skip=%skip%" %%A IN...
  • Batch Programmierung

    Batch Programmierung: Guten Nabend miteinander. Also ich darf für meinen Chef ein kleines Programm schreiben welches Die Namen aus einer Textdatei ausliest und danach...
  • GELÖST Batch-Programmierung: Prozess starten+warten

    GELÖST Batch-Programmierung: Prozess starten+warten: Ein Prozess soll gestartet werden, unmittelbar danach soll darauf gewartet werden, dass ein bereits bestehender, aebr anderer Prozess durch...
  • Batch Programmierung - Befehl in einer Variablen speichern

    Batch Programmierung - Befehl in einer Variablen speichern: Hallo zusammen, ich versuche gerade verzweifelt eine Batch zu schreiben, welche mir die Ausgabe eines Befehls in einer Variablen speichern soll...
  • GELÖST Schulaufgabe Batch-Programmierung HILFE!!!

    GELÖST Schulaufgabe Batch-Programmierung HILFE!!!: Hallo! Ich habe in der Schule die folgende Aufgaben bekommen: Aufgabe 1: Erstellen Sie eine BATCH-Datei, die folgendes leistet: Es ist ein...
  • Ähnliche Themen

    • Ich finde meinen Fehler

      Ich finde meinen Fehler: Bin grade bei der Entschlüsselung und immer kommt genau das gleiche bei Raus habt ihr nen Plan wo der Fehler ist FOR /F "skip=%skip%" %%A IN...
    • Batch Programmierung

      Batch Programmierung: Guten Nabend miteinander. Also ich darf für meinen Chef ein kleines Programm schreiben welches Die Namen aus einer Textdatei ausliest und danach...
    • GELÖST Batch-Programmierung: Prozess starten+warten

      GELÖST Batch-Programmierung: Prozess starten+warten: Ein Prozess soll gestartet werden, unmittelbar danach soll darauf gewartet werden, dass ein bereits bestehender, aebr anderer Prozess durch...
    • Batch Programmierung - Befehl in einer Variablen speichern

      Batch Programmierung - Befehl in einer Variablen speichern: Hallo zusammen, ich versuche gerade verzweifelt eine Batch zu schreiben, welche mir die Ausgabe eines Befehls in einer Variablen speichern soll...
    • GELÖST Schulaufgabe Batch-Programmierung HILFE!!!

      GELÖST Schulaufgabe Batch-Programmierung HILFE!!!: Hallo! Ich habe in der Schule die folgende Aufgaben bekommen: Aufgabe 1: Erstellen Sie eine BATCH-Datei, die folgendes leistet: Es ist ein...
    Oben