Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Starten und beenden eines Programms mittels VB-Script

Frage Entwicklung Batch & Shell

Mitglied: 10440

10440 (Level 1)

28.10.2005, aktualisiert 13.08.2007, 27703 Aufrufe, 16 Kommentare

Hallo Zusammen,

Ich hoffe ihr könnt mir helfen obwohl ich nicht ganz sicher bin ob das hier der richtige Bereich ist.
Es geht um ein im Internet gefundenes VB-Script, welches automatisch unter Windows 2000 die Defragmentierung der einzelnen Partitionen startet und nach der Fertigstellung beendet.
Der automatische Start klappt auch ohne Probleme, allerdings hapert es noch am automatischen beenden.

Vielen Dank schon mal für die Hilfe.

Mit freundlichen Grüßen Mandos

Und hier das Script:

<font class="code">

'Shell-Objekt initialisieren
Set WshShell = CreateObject("WScript.Shell")

'Defrag-Management-Console mit gewünschtem Laufwerk starten
WshShell.Run "dfrg.msc c:"

'Warteschleife, bis das Fenster "Defragmentierung" erscheint
While WshShell.AppActivate("Defragmentierung") = FALSE
Wscript.Sleep 1000
Wend

'Defragmentierungs-Fenster zur Sicherheit nochmal aktivieren
WshShell.AppActivate "Defragmentierung"
Wscript.Sleep 200

'Tastenfolge zum Start der Defragmentierung senden
WshShell.SendKeys ("%OD")

WshShell.SendKeys ("{TAB}")
WshShell.SendKeys ("~")


'Warten, bis Defragmentierung beendet ist
While WshShell.AppActivate("Defragmentierung abgeschlossen") = FALSE
Wscript.Sleep 5000
Wend

'Meldungsbox zur Sicherheit nochmal aktivieren
WshShell.AppActivate "Defragmentierung abgeschlossen"
'WScript.Sleep 200

'Tastenkombination ALT+F4 zum Schliessen der Meldungsbox senden
WshShell.SendKeys ("{TAB}")
WshShell.SendKeys ("~")
WScript.Sleep 200

'Tastenkombination ALT+F4 zum Beenden von Defrag senden
WshShell.Sendkeys "(%{F4})"
WshShell.Sendkeys "(%{F4})"

</font>
Mitglied: fritzo
28.10.2005 um 18:16 Uhr
Hi,

spar Dir den Aufwand mit der MMC und nimm das konsolenbasierte Binary defrag.exe. Inklusive Logfile wäre der Aufruf wie folgt:

WshShell.Run "defrag.exe c: > logfile.txt"

Und wenn das fertig ist, ist es fertig und muß nicht beendet oder abgeschossen werden.

Grüße,
fritzo
Bitte warten ..
Mitglied: Biber
28.10.2005 um 18:41 Uhr
*lacht* @fritzo

Genau das gibts doch nicht bei Win2000...
Da ist doch dieser Rohrkrepierer von abgespeckter Diskeeper-Version dabei (keine Möglichkeit, das Zeugs einfach in Batch oder als Task einzubinden).
Siehe bei M$ KB 130539:
[...] "Microsoft Windows Server 2003, Microsoft Windows XP, and Microsoft Windows 2000 include a tool for disk defragmentation. The Windows Disk Defragmenter tool is a limited version of the Diskeeper program from Diskeeper Corporation. Disk Defragmenter does not include all the features available in the full version of Diskeeper." [...]

Natürlich gäbe es -rein technisch- die Möglichkeit, das Defrag-Utility von einem Win-XP-System zu kopieren... das würde auch anstandslos unter W2k laufen, aber es wäre bestimmt rechtlich fragwürdig. So einen Tipp würde ich nie posten.

Soweit ich weiß, gibt/gab es für die englische W2k-Version eine Lösung namens Rundfrg.exe, die mal als JSI-Tipp 2062 gepostet wurde. Ist wegen zu vieler Beschwerden und Fehler dort gestrichen worden. Und unter JSI 8414 und ein bisschen Hangelei kommt man/frau auch noch auf ein Sourceforge-Projekt namens AutoDefrag, in dem das Ganze mit CPP gelöst wird. Aber ein wenig aufwändig ist das schon.

Da lass uns lieber dieses Skriptchen zum Fliegen bringen.

Grüße
Biber
Bitte warten ..
Mitglied: 10440
28.10.2005 um 18:47 Uhr
Erstmal danke für deine Hilfe,

aber da die Defragmentierung auf Windows 2000 Server laufen soll, fällt diese Lösung schon einmal weg.
Da aus unerklärlichen Gründen MS die "defrag.exe" nicht mitgeliefert hat.
Leider kann auch keine andere Software eingesetzt werden, so dass nur noch die Möglichkeit mit "dfrg.msc" bleibt.

Gruß Mandos
Bitte warten ..
Mitglied: ketchup
28.10.2005 um 21:58 Uhr
Hi,

spar Dir den Aufwand mit der MMC und nimm
das konsolenbasierte Binary defrag.exe.
Inklusive Logfile wäre der Aufruf wie
folgt:

WshShell.Run "defrag.exe c: >
logfile.txt"

Und wenn das fertig ist, ist es fertig und
muß nicht beendet oder abgeschossen
werden.

Grüße,
fritzo

wie schon geantwortet => du befindest dich am falschen Betriebssystem ... bitte genau lesen
Bitte warten ..
Mitglied: ketchup
28.10.2005 um 22:02 Uhr
hallo,

das mit dem rechtlichen ist so ein problem ... dazu kommt noch der verlust von supportleistungen wenn notwendig.

ich kenn die beiden tools.
und habe sie auch bei mir eingesetzt ... testweise.

habs auch adaptiert und an meine bedürfnisse angepasst.

das autodefrag wollte bei mir allerdings nicht wirklich ... naja ich arbeite auch auf englischen systemen und da hats wohl gehappert.


hast du an dem skript was verändert? oder 1:1 übernommen und eingesetzt?


wenn du einen kostenlosen defrager brauchst, dann kannst von O&O die freeware einsetzen ... die lizenz solltest dir trotzdem durchlesen. weil ich weiß net, obs net nur fürn privaten einsatz frei ist.

jürgen
Bitte warten ..
Mitglied: fritzo
29.10.2005 um 02:14 Uhr
@ketchup
danke für den Klug###r-Tip ;) war aber redundant, da bereits von Biber gepostet.

@Biber + mandos
Hab leider kein W2K hier und bin davon ausgegangen, daß es mit dabei ist - schon merkwürdig, daß es nicht so ist. Taskkill hat er dann auch nicht. Wie wäre es mit dem Freeware-Tool PSKill von Sysinternals? Gibts auf http://www.sysinternals.com/Utilities/PsKill.html

Aber ich schau noch mal nach einer Scriptlösung; sollte es eigentlich geben.

Grüße,
fritzo
Bitte warten ..
Mitglied: fritzo
29.10.2005 um 02:21 Uhr
Hi,

hier gibts auch einen freien Defragger:
http://www.sysinternals.com/Utilities/Contig.html

Du könntest ihn mittels eines Batchfiles benutzen:

@echo off
if exist %temp%\123tmp.tmp del %temp%\123tmp.tmp
dir /b /L /s >> %temp%\123tmp.tmp
for /f %%a in (%temp%\123tmp.tmp) do contig -s "%%a"
@echo ...fertig!

Oder einfach rekursiv:
contig -s c:\*.*

Grüße,
fritzo
Bitte warten ..
Mitglied: fritzo
29.10.2005 um 02:36 Uhr
Ok,

hier ist das versprochene VBScript zum Beenden eines Prozesses. Du mußt mmc.exe beenden (es werden alle Prozesse dieses Namens beendet)
--------------snip---------------

Option Explicit
Dim objWMIService, objProcess, colProcess
Dim strComputer, strProcessKill

strComputer = "."
'strProcessKill = "'dfrg.msc'" geht nicht --> mmc.exe
strProcessKill = "'mmc.exe'"

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
Next
--------------snip--------------

Grüße,
fritzo
Bitte warten ..
Mitglied: Biber
29.10.2005 um 02:46 Uhr
Super, fritzo!
Den contig-Defragger kannte ich auch noch nicht. Danke!

Mit dem Gedanken, den Defrag-Krams am Ende einfach mit Taskkill oder ähnlichem abzusch(l)ießen, habe ich auch gespielt.. aber ich dachte, vielleicht postet einer der VBS-Gurus noch die vorgesehene Möglichkeit.
Falls dieses VBSkript überhaupt zuverlässig ist - was passiert denn da, wenn der/die dfrg.msc mit einer dieser albernen Rückfragen kommt, die ich bei M$ so liebe? "Sektor 16274 ist nicht lesbar - wollen Sie ein Protokoll speichern?" oder so etwas..

Egal, Deine Sysinternals-Variante probier ich mal aus.

[Edit]...am 29.10. nach dem Frühstück...
Das Contig-Utilitily habe ich nun ausprobiert - allerbest, wie alles von SysInternals.
Würde spätestens jetzt keine Minute Aufwand in irgendeine VBS-Ruf-mir-ein-GUI-Proggi-und-drück-mir-die-Tasten-Lösung stecken.
Ist nicht gegen VB-Skripter gerichtet - aber ein Defrag- oder Aufräumkrams ist für mich eine Batch-Anforderung mit Silent im Hintergrund und Log-Möglichkeiten.
Und keine für bunte Kästchen auf dem Monitor.
[/Edit]

Grüße
Biber
Bitte warten ..
Mitglied: fritzo
29.10.2005 um 03:00 Uhr
Du kannst contig bedenkenlos benutzen, sämtliche Defragtools gehen imho über die Windows-API und nutzen alle die gleichen Funktionen.

was passiert denn da, wenn der dfrg.msc mit einer diesen albernen
Rückfragen kommt, die ich bei M$ so liebe? "Sektor 16274 ist nicht lesbar -
wollen Sie ein Protokoll speichern?" oder so etwas..

DAS wäre wahrscheinlich "eher nicht so gut" Deswegen auch mein Vorschlag, ein Dosbox-Tool zu benutzen. Bei den GUI-Tools hat man so überhaupt keine Infos, Rückgabewerte oder Logs.

Was anderes - seid ihr ganz sicher, daß es nur die MMC-Variante unter W2K gibt? Weil ich ein paar Artikel gefunden habe, die auf folgende Files unter W2K hinweisen:
-Dfrgfat.exe
-Dfrgntfs.exe

Ich hab hier momentan leider kein W2K zum Nachsehen, aber Ihr könntet ja mal checken, ob diese Files existieren und ggfs. in Zusammenhang mit einem Script benutzbar sind (kann natürlich auch sein, daß das nur die Binaries für das GUI-Defrag sind..)

[EDIT: vergesst das mit den zwei Files, es sind wirklich nur die für das GUI-Defrag]

Grüße,
fritzo
Bitte warten ..
Mitglied: ketchup
29.10.2005 um 09:40 Uhr
hi,

also diese variante finde ich nicht sinnvoll.
warum sollte ich alle mmc.exe? was ist wenn ich nebenbei noch andere mmcs laufen habe? die sollen in diesem falle alle gekillt werden?
wäre wohl nicht so gut
außerdem was passiert bei mehreren platten und partitionen?

da gefällt mir die contig-variante schon besser.

aber wie gesagt, ich hab das vbs für die mmc bei mir im einsatz ... etwas adaptiert, aber funktioniert.
klar sind solche "seltenen varianten" wie "sector nicht gefunden" udgl nicht damit abgedeckt.

jürgen
Bitte warten ..
Mitglied: fritzo
30.10.2005 um 15:10 Uhr
also diese variante finde ich nicht
sinnvoll.
warum sollte ich alle mmc.exe? was ist wenn
ich nebenbei noch andere mmcs laufen habe?
die sollen in diesem falle alle gekillt
werden?

@Jürgen

Hi Du Schlauberger,

was meinst Du wohl, warum ich in meinem Posting darauf hingewiesen habe, daß dies so ist... Leider heissen die Prozesse nun mal nicht "MMC noch benötigt" und "MMC zum Abschuß freigegeben" ;) Daher kann man nun mal nur "mmc.exe" beenden. Eine andere Idee wäre, den Prozess per VBScript zu starten und sich dann die PID zu holen, um mit dieser zu arbeiten. Aber das führt hier zu weit. Aber zumindest habe -ich- ein paar konstruktive Vorschläge dazu. ;)
Bitte warten ..
Mitglied: fritzo
30.10.2005 um 15:12 Uhr
Würde spätestens jetzt keine
Minute Aufwand in irgendeine
VBS-Ruf-mir-ein-GUI-Proggi-und-drück-mir-die-Tasten-Lösung
stecken.

ACK, Batch ist hier besser geeignet.
Bitte warten ..
Mitglied: Biber
30.10.2005 um 15:32 Uhr

@fritzo & ketchup

also diese variante finde ich nicht sinnvoll.
warum sollte ich alle mmc.exe? ..
..
>>Hi Du Schlauberger,

Nun kommt mal wieder runter. Die Ausgangsfrage von Mandos war : "Ich hab da im Internet ein VBSkript gefunden.."
...und die gemeinsam entwickelte Antwort ist:
"Bring es unauffällig wieder dahin zurück - wir haben eine bessere Lösung."

Schönen Sonntag noch
Biber
Bitte warten ..
Mitglied: maneich
13.08.2007 um 13:21 Uhr
Hallo,

bin über Google auf diesen Thread gestoßen.

Sysinternals gehört ja jetzt zu MS.

Nach einigem Suchen habe ich aber die Progies von Sysinternals gefunden.

Per 31.03.2007 wurde die config.exe geändert und wird nur noch zur "Filedefragmentierung" angeboten.

Frage: Kann man damit trotzdem auch Laufwerke defragmentieren oder ist nur die alte Version dazu geeignet.

Hat auch nur eine Größe von 55 KB.

Mit freundlichen Grüßen maneich
Bitte warten ..
Mitglied: dimugi
16.08.2009 um 13:07 Uhr
Der Dialog der nach Ende der Defragmentierung aufgeht tägt den selben Namen wie das Haupfenster.

Ich habe festgestellt, daß das Script aus der while-Schleife "Defragmentierung abgeschlossen" nicht heraus kommt.
Weil wahrscheinlich die Bezeichnungen der beiden Fenster gleich ist und keines "Defragmentierung abgeschlossen" heißt.

Da beide Namen gleich sind könnte ich mir vorstellen über eine Programm-id (Task-ID) o.ä. das Erreignis abzufragen.
Leider bin ich in VBS noch nicht fit genug.

Vielleicht hat jemand dazu eine Idee. Es wäre schade wenn mann das Script nicht noch fertig machen könnte, da es bis auf das beenden ja funktioniert.

Gruß

Dimugi
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

LAN, WAN, Wireless
Script bei starten einer VPN Verbindung mit Checkpoint-VPN Client (2)

Frage von maddig zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...