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, 13727 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 Installation

Windows Install ISO mit übergroßer Install.wim auf FAT32 übertragen

Tipp von Lochkartenstanzer vor 3 TagenWindows Installation9 Kommentare

Moin Kollegen, Viele von euch werden sicher aus praktischen Gründen nicht nur DVDs oder "virtuelle" CD-Laufwerke (Zalman, IODD) zum ...

Datenschutz

Gehe zurück auf Los, ziehe keine 4.000 Mark. E-Privacy (erstmal) gescheitert

Information von certifiedit.net vor 4 TagenDatenschutz

Webbrowser

Firefox 71 verfügbar mit Picture in Picture Funktion

Information von sabines vor 4 TagenWebbrowser2 Kommentare

Die neue Firefox Version 71 unterstützt, zunächst nur für Windows, Picture in Picture. Damit kann ein Video in einem ...

E-Mail
SPF beim Versenden testen
Tipp von StefanKittel vor 6 TagenE-Mail3 Kommentare

Hallo, wenn man einen SPF für einen Exchange, oder anderen Mail-Server, konfigiruert muss man das ja auch testen. Ganz ...

Heiß diskutierte Inhalte
E-Business
Brainstorming: Zeiterfassungs- oder gesamtes Abrechnungssystem
Frage von certifiedit.netE-Business23 Kommentare

Guten Abend, alles neu macht der, naja, schon lange nicht mehr, Mai Zum Ende des Jahres, besser zum Beginn ...

MikroTik RouterOS
Mikrotik Router empfehlenswert?
Frage von matze2090MikroTik RouterOS14 Kommentare

Hallo, ich würde gerne mir Mikrotik anschauen. Reicht dieser Router zum erstmal Test? Er Kostet ca 23€. Ich habe ...

Netzwerkmanagement
Hausverkabelung auf billig für 8
Frage von AmateurverkablerNetzwerkmanagement10 Kommentare

Hallo Community, ich bin in eine Haus-WG eingezogen welche 7 Zimmer hat und eine Einliegerwohnung. Der Vermieter hat in ...

Festplatten, SSD, Raid
Notebook zeigt kein BIld wenn SSD Festplatte angeschlossen ist
gelöst Frage von Ghost108Festplatten, SSD, Raid9 Kommentare

Hallo zusammen, habe ein Medion Touch Tablet / Notebook: Model E3215 - MD 60794 MSN: 30023333 Bei diesem wollte ...