Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst WSH Prozess parallel ausführen und beenden

Mitglied: cim

cim (Level 1) - Jetzt verbinden

18.05.2006, aktualisiert 18.09.2006, 13637 Aufrufe, 4 Kommentare

anderes Script starten und ohne Fehler beenden

Hallo,
wie kann ein WSH-Script ein anderes ausführen und ohne Fehlermeldung beenden?

Hintergrund:
Fortschrittsanzeige für Dateien kopieren

meine bisherige Lösung:

'ScriptEins
set WshShell = wscript.createobject("WScript.shell")
...
set oexec = wshshell.exec("wscript.exe c:\ScriptZwei.vbs")
...
oexec.terminate

ScriptEins kopiert die Dateien
ScriptZwei startet den Internet Explorer für die Fortschrittsanzeige, bei der es ausreicht, dass der User eine Änderung sieht

Nach terminate kommt eine Fehlermeldung "ungültiges Fensterhandle".
Ich vermute, dass ScriptEins zwar ScriptZwei beendet, aber der IE mit der Anzeige dabei seinen Prozess verliert.

Könnte das der Fehler sein?
Wie kann ich den IE von ScriptZwei beenden?
Oder muss ich ScriptZwei anders aufrufen, um es wieder einwandfrei beenden zu können (vielleicht über WshShell.Run Command)?

Vielen Dank!
Mitglied: Biber
07.08.2006 um 20:02 Uhr
Moin cim,

wie Du an der Anzahl der Aufrufe dieser Frage siehst, ist schon gewisses Interesse da.
Aber anscheinend reichen die vorliegenden Information nicht aus, um Dir schlaue Tipps zu geben.

Deshalb bleibt es wieder am Mod hängen.. *seufz*

Rückfragen:
1) besteht das Problem noch oder hast Du es inzwischen selbst gelöst? Wenn ja, wie?
2) Bis zur Aussage "IE starten, um dessen Fortschrittsanzeige zu nutzen" konnte ich Dir gedanklich noch folgen. Aber:
Wenn Du eine Fortschrittsanzeige anzeigst, WTF treibt Dich dann zum .Terminate??
In meiner eher beschränkten Phantasie wäre der gottgegebene erwartete Ablauf, dass das handle ( das doch vermutlich ein handle = CreateObject("InternetExplorer.Application") ist ??) vor sich hin fortschrittsbalkt, so lange kein Error und ReadyState<>4 (Loaded) ist.
Und sich in einem dieser Fälle gefälligst selbst beendet mit WScript.Quit.

Du aber scheinst den Fortschrittsbalken zu starten und irgendwann die aufrufende Hülsenfunktion ("Skript2.vbs") abzuschießen?
Wie kommunizieren denn bei Dir das "arbeitende" (z.B. kopierende) Skript und die "anzeigende" (IE-Laufbalkenzeugs)-Funktion?

Womit ich bei der letzten Frage wäre:
3) Magst Du vielleicht die beiden Schnipsel mal posten?
Habe mich vorher vergewissert, dass unterhalb dieses Kommentars noch ca. 273cm Platz auch für längere Codefragmente wären.
Also keine Scheu.

Grüße
Biber
Bitte warten ..
Mitglied: cim
08.08.2006 um 07:07 Uhr
Moin Biber,
sorry, dass ich erst jetzt antworte, aber ich habe die Scripte noch mit ein paar Kommentaren versehen.
Und vielen Dank für die Hilfe!

Ich suche hier gerade etwas, wie ich Dateien anhängen kann ... äh ... aber das geht wohl nur im Beitrag und nicht in Antworten. Wiedemauchsei - dann brauche ich wohl die 273 cm.

Das Problem besteht immer noch. Da ich aber kein Erste-Reihe-Vorne-Sitzer bin und ich Programmieren nicht wirklich gelernt habe, habe ich ein wenig geschummelt:
Das Main-Programm erstellt ein Verzeichnis und startet den Laufbalken (sorry, nur ein Zähler, aber immerhin). Laufbalken schließt sich selbst, wenn Main das Verzeichnis gelöscht hat. Nicht elegant, aber tut.

Aus irgenwelchen Gründen wurden bei mir zwar die Scripte über Quit beendet, allerdings hatte ich im Taskmanager noch die Prozesse (das beim Testen ziemlich ätzend wurde). Daher "terminate". Habe ich aus einem Buch "Inside Windows Script Host".

Variablen mit q haben etwas mit der Quelle zu tun, z = Ziel. Ich hoffe, dass sich durch die Formatierungen die Kommentare nicht allzu sehr verschoben haben.

Und überhaupt: was ist WTF? WZT hätte ich mir noch denken können...

Also schon Mal vielen Dank!
Schöne Grüße!

01.
'MAIN#####################################################
02.
Option Explicit			'Variablen müssen definieren werden
03.

04.
KopieStart()			
05.
'Programmaufruf, weil "exit" sonst nicht möglich und Prozess nicht schließt
06.

07.
'_______________________________________________________________________
08.
function KopieStart
09.

10.
dim fso, explorer, WshShell, oExec
11.
dim start, ende, zeit
12.
dim Datum, Monat, Tag
13.
dim ie, liste, listeIE, Schreibschutz, nummer, i, j, StatusOrdner
14.
dim z_verz, z_expl, z_datei
15.
dim q_datei, q_verz, q_expl, q_liste
16.
'dim netzwerk
17.

18.
set fso = wscript.CreateObject("Scripting.FileSystemObject")									'open file-scripting
19.
'set netzwerk = wscript.createobject("wscript.network")
20.
set explorer = wscript.createobject("shell.application")
21.
set WshShell = wscript.createobject("WScript.shell")
22.

23.
if msgbox("SOLL DIE SICHERUNG DER DATEN JETZT GESTARTET WERDEN?", vbyesno + vbinformation, "DATEIEN KOPIEREN") = vbno then exit function
24.

25.
monat = month(date)													'Datum für Verzeichnisnamen
26.
if month(date) < 10 then monat = "0" & month(date)
27.
tag = day(date)
28.
if day(date) < 10 then monat = "0" & day(date)
29.
datum = year(date) & "_" & monat & "_" & tag
30.
start=timer
31.
liste=" "
32.
listeIE=" "
33.
nummer=0
34.
schreibschutz = 0
35.

36.
set q_expl = explorer.BrowseForFolder(&H0,"Bitte QUELL-Ordner auswählen:",&H01 ,17) 
37.
if q_expl = "" or isnull(q_expl) then exit function		'Wenn Abbrechen dann Exit
38.
q_verz = q_expl.parentfolder.parsename(q_expl.title).path & "\"								'den gesamten Ziel-Pfad ermitteln
39.
set q_liste = fso.getfolder(q_verz)
40.

41.
set z_expl = explorer.BrowseForFolder(&H0,"Bitte ZIEL-Ordner auswählen:",&H01 ,17) 
42.
if z_expl = "" or isnull(z_expl) then exit function											'Wenn Abbrechen dann Exit
43.
z_verz = z_expl.parentfolder.parsename(z_expl.title).path & "\" & datum & "\"						'den gesamten Ziel-Pfad ermitteln
44.
fso.createfolder(z_verz)
45.

46.
set ie = wscript.createobject("InternetExplorer.Application", "event_")							'Internet Explorer für Ablauf
47.
ie.navigate ("javascript:'<title>Sicherung</title><body scroll=no>Sicherung von Dateien und Verzeichnissen</body>'")
48.
ie.width=500
49.
ie.height=250
50.
ie.toolbar=false
51.
ie.statusbar=false
52.
ie.visible=true
53.
do
54.
loop while ie.readystate <> 4
55.
ie.document.body.innerhtml = "Sicherung wird gestartet"
56.

57.
fso.createfolder "c:\temp\XYZSaveStatusABC"									'Ordner anlegen für Prüfung, ob Laufbalken ausgeführt wird
58.
set StatusOrdner=fso.getfolder("c:\temp\XYZSaveStatusABC")
59.
wscript.sleep 100
60.

61.
set oexec = wshshell.exec("wscript.exe c:\laufbalken.vbs")					'Aufruf Laufbalken-Script
62.

63.
set q_datei = q_liste.files
64.
for each i in q_datei
65.
	if i.attributes = 1 then schreibschutz = schreibschutz +1
66.
	liste =  i & vbcrlf	& liste 
67.
	listeIE =  i & "
68.
" & listeIE 
69.
	ie.document.body.innerhtml = listeIE
70.
	nummer=nummer+1
71.
	fso.CopyFile i, z_verz, true
72.
next
73.

74.
set q_datei = q_liste.subfolders
75.
for each j in q_datei
76.
	if j.attributes = 1 then schreibschutz = schreibschutz +1
77.
	liste =  j & vbcrlf	& liste 
78.
	listeIE =  j & "
79.
" & listeIE 
80.
	ie.document.body.innerhtml = listeIE
81.
	nummer=nummer+1
82.
	fso.Copyfolder j, z_verz, true
83.
next
84.

85.
statusOrdner.delete		'Verzeichnis löschen, damit Laufbalken beendet
86.

87.
ende = timer
88.
zeit = round(ende-start,3)
89.
ie.quit
90.

91.
'oexec.terminate 
92.
'do while oexec.status=0
93.
'	wscript.sleep 200											'Warten, sonst Laufzeitfehler
94.
'loop
95.

96.
msgbox "Kopieren von " & nummer & " Dateien beendet!" & vbcrlf & schreibschutz & " schreibgeschützte Dateien wurden nicht übertragen." & _
97.
	vbcrlf & vbcrlf & liste, 0+64, "Fertig nach " & zeit & " Sekunden"
98.

99.
wscript.quit		'trotzdem bleibt Prozess bestehen???, deshalb "exit function"
100.
oexec.terminate
101.
exit function
102.

103.
end function
104.
'#########################################################
..und das zweite Skript "c:\Laufbalken.vbs"
01.
'LAUFBALKEN#################################################
02.
Option Explicit
03.

04.
dim ieFort, zahl, fso
05.

06.
set fso = wscript.CreateObject("Scripting.FileSystemObject")									'open file-scripting
07.

08.
set ieFort = wscript.createobject("InternetExplorer.Application", "event_")							'Internet Explorer für Ablauf
09.
ieFort.navigate ("javascript:'<title>In Arbeit...</title><body scroll=no>gestartet</body>'")
10.
ieFort.width=150
11.
ieFort.height=100
12.
ieFort.left=100
13.
ieFort.toolbar=false
14.
ieFort.statusbar=false
15.
ieFort.visible=true
16.

17.
do
18.
loop while ieFort.readystate <> 4
19.
ieFort.document.body.innerhtml = "Status"
20.

21.
do while (fso.folderexists("c:\temp\XYZSaveStatusABC\"))					'Darf ich weitermachen?
22.
	zahl = zahl +1
23.
	wscript.sleep 100
24.
	ieFort.document.body.innerhtml = zahl
25.
loop
26.
iefort.quit
27.
wscript.quit
28.

29.
'#########################################################
[Edit] Formatierung auf <code> gesetzt. Biber
[/Edit]
Bitte warten ..
Mitglied: Biber
24.08.2006 um 00:25 Uhr
Moin cim,

nach längerer Pause mal wieder eine kurze Zwischenmeldung.

Zwischenmeldung, weil eine saubere Antwort doch ein bisschen mehr Zeit brauchen würde.

Aber ein paar Anmerkungen möchte ich doch schon jetzt loswerden, auch wenn es keine umfassende "Antwort" im eigentlichen Sinne wird.

Ich fang mal unsortiert an.
Worauf ich mich nicht einlassen werde, ist die im Tiel formulierte Frage. ("WSH Prozess parallel ausführen und beenden").
Mag auch ein interessantes Thema sein, aber Prozesse, die sich gegenseitig starten und gegenseitig abschießen, das ist eher was für RobotWars oder ähnliches.
So würde ich keine Gebrauchs-Applikation aufziehen.

Ich nehme lieber den Fokus: "Internet-Explorer-Funktionen für eigene Zwecke nutzen" ohne den (kompletten) Explorer anzuzeigen.

Dazu reicht allerdings ein Öffnen einer (weiteren) Explorer-Instanz im vorhandenen Skript - es ist kein zweites Skript nötig.
Beispiel:
01.
'LAUFBALKEN#################################################
02.
Option Explicit
03.

04.
dim ieFort, zahl, fso
05.

06.
set fso = wscript.CreateObject("Scripting.FileSystemObject")                                    'open file-scripting
07.

08.
set ieFort = wscript.createobject("InternetExplorer.Application")          'Internet Explorer für Ablauf
09.
'ieFort.navigate ("javascript:'<title>In Arbeit...</title><body scroll=no>gestartet</body>'")
10.
ieFort.navigate "f:\VBS_Beispiele\Laufbalken\biber.htm"
11.
ieFort.width=150
12.
ieFort.height=100
13.
ieFort.left=100
14.
ieFort.toolbar=false
15.
ieFort.statusbar=false
16.
ieFort.visible=true
17.

18.
do
19.
loop while ieFort.readystate <> 4
20.
ieFort.document.body.innerhtml = "Status"
21.
on Error resume next
22.
do while (zahl < 200) '(fso.folderexists("d:\temp"))                    'Darf ich weitermachen?
23.
    zahl = zahl +1
24.
    wscript.sleep 100
25.
    ieFort.document.body.innerhtml = zahl
26.
    'if err <> 0 then Wscript.Quit  
27.

28.
loop
29.
iefort.quit
30.
wscript.quit
31.

32.
'#########################################################
An diesem Testschnipsel sind mir -im Vergleich mit Deinem Ansatz- wichtig:
- ich rufe als Seite eine lokale Seite "f:\VBS_Beispiele\Laufbalken\biber.htm" auf.
Die ist vollkommen leer (0 Byte groß). Aber, da sie eben eine lokale Site ist, "darf" ich auch nach dem neueren IE-Security-Patches so etwas wie
01.
ieFort.document.body.innerhtml
..ändern. Ist sonst nämlich tabu - ebenso wie Deine "javascript"-Aufrufe.
Hat mir mein relativ aktuell gepatchter IE sofort um die Ohren gehauen bzw Sicherheitswarnungen vor der Ausführung gebracht.

Ebenso kann ich natürlich z.B. den "Title" oder den "Seiteninhalt" tatsächlich in der lokalen *.htm-Seite als normalen HTML-Text hinterlegen oder aber statt einer echten Seite einfach "about:blank" aufrufen.

Neben der "Zwei-Parallel-Skript-Strategie" und den "javascript"-Funktionen ist das Dritte, was IMHO suboptimal ist, Dein zweiter Parameter im IE-Instanz-initialisieren.
01.
set ie = wscript.createobject("InternetExplorer.Application", "event_") 
Wenn Du diesen zwiten Parameter "event_" angibst, sagst Du damit, dass Du eine vorhandene EventHandler-Methode durch eine "eigene" ersetzen willst - die muss also die gleichen Inputparameter und die gleichen Rückgabewerte haben wie die Standard-Eventhandler.
Und auch den gleichen Namen, aber mit den angegebenen Prefix ("event_") davor.

Das brauchst Du aber jetzt noch gar nicht - vielleicht später mal, wenn Du eine ProgressBar einbauen willst. Im Moment kannst (und musst meiner Meinung nach) Du den zweiten Parameter weglassen.

Grüße
Biber
Bitte warten ..
Mitglied: cim
18.09.2006 um 12:49 Uhr
Hallo,
entschuldige, dass ich mich nicht gemeldet habe.
War im Urlaub und habe jetzt Arbeit bis zum Hals.
So bald ich dazu komme, probiere ich Deine Lösung und melde mich.
Danke und schöne Grüße!
Bitte warten ..
Ähnliche Inhalte
Windows Tools
WSH - Dateien umbennnen
gelöst Frage von peter58haWindows Tools10 Kommentare

Hallo zusammen, ich bin absoluter Neuling in Sachen WSH und benötige eure Hilfe bei einem Script, welches Dateien umbenennt. ...

Microsoft

ATLAS-Ausfuhr - Internetausfuhranmeldung Plus (IAA-Plus)

Frage von FischerICTMicrosoft6 Kommentare

Guten Abend -all, ich suche für einen Kungen ein kleines Anwendungsprogramm "Softwarelösung" die die Schnittstelle zu ATLAS aufweist Derzeit ...

Windows Server

2 Terminalserver parallel betreiben

Frage von derSESOWindows Server5 Kommentare

Hallo! Unser Terminalserver läuft auf MS Windows 2012 R2 (ist auch als Lizenzserver). Jetzt benötigen wir einen zweiten Terminalserver ...

Netzwerke

2 Internetanschlüsse parallel nutzen?

gelöst Frage von MeterpeterNetzwerke14 Kommentare

Hallo Community, habe folgendes Szenario. Ein Rechner ist per Switch mit zwei verschiedenen Internetanschlüsse verbunden (zwei verschiedene Leitungen). Ist ...

Neue Wissensbeiträge
Windows 10

Windows 10 - Programme laufen schneller, wenn Sie mit Administratorrechten ausgeführt werden !

Erfahrungsbericht von 1Werner1 vor 3 StundenWindows 106 Kommentare

Moin, das wollte ich erst nicht glauben, aber es ist so. Wenn Ihr ein Programm mit Administratorrechten unter Windows ...

Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 1 TagSicherheits-Tools5 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Off Topic
Sachen die die Welt nicht braucht - Platz 1
Tipp von brammer vor 4 TagenOff Topic20 Kommentare

Hallo, ich habs als Tipp angelegt als Erfahrungsbericht nein Danke brammer

Humor (lol)
Spirit of Health-Kongress in Berlin
Information von AnkhMorpork vor 4 TagenHumor (lol)6 Kommentare

tgif! Beim dritten Spirit of Health-Kongress trafen sich am Wochenende Alternativmediziner und Naturheilkundler im Maritim Hotel Berlin, um sich ...

Heiß diskutierte Inhalte
Windows Server
Eingeschränkte Gruppen - Spezielle Benutzergruppe hinzufügen
Frage von killtecWindows Server14 Kommentare

Hallo, ich möchte gerne folgendes Realisieren: Ich habe bei mir Eingeschränkte Gruppen via GPO aktiv und möchte nun der ...

LAN, WAN, Wireless
Switch als Verbindung von 2 Netzwerken
gelöst Frage von Lutz-ReLAN, WAN, Wireless12 Kommentare

Guten Tag Ich hab folgendes Problem 2 Rechner und 2 IP Kameras sind ohne dhcp in einen IP4 Netzwerk ...

DNS
Größere DNS Probleme nach zweitem DC. Eigentlich sollte es auch dadurch besser werden
Frage von TeWutzDNS12 Kommentare

Hallo zusammen, nachdem ich letzte Woche erfolgreich einen zweiten DC ) an den Start gebracht habe melden sich weiterhin ...

Netzwerkgrundlagen
Reicht 10GBit Uplink Port für Stacking für ein 10GBit Switch?
gelöst Frage von walnickNetzwerkgrundlagen12 Kommentare

Hallo, Ich habe eine frage. Ich überlege gerade 2 neue Switche von CiscoSG350XG-24F  zu kaufen und die als Core ...