vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
Defragmentieren per VBScript 
Autor: Vodkaholic
Datum: 08.10.10 12:30

Hallo an alle,

ich habe folgendes Problem:

Und zwar möchte ich mehrere XP Clients in unserem Netzwerk per Script defragmentieren. Das Script was ich habe funktioniert schon so weit, dass es immer jeder ersten Donnerstag im Monat startet. Dieses Script soll jedoch beim Herunterfahren des Clients geschehen damit die Mitarbeiter nicht gestört werden. Das Script wird auch ausgeführt jedoch bricht es ab wenn ich die Popupmeldung weg klicke. Nun wollte ich es so bauen, dass das Script erst ausgeführt wird und am Ende eine Nachricht kommt, dass die Defragmentierung erfolgreich durchgeführt wurde.

Hier ist mein Script womit ich den Defrag starte:

Option Explicit
 
Wscript.echo nthDayOfMonth(now(), 1, "thu") 'Hier werden die Eingaben gemacht
'Wscript.echo nthDayOfMonth("01/10/2010", 1, "fri") 'Hier werden die Eingaben _
  gemacht
 
'======================================================
Function nthDayOfMonth(strRefDate, IntOrder, strDayName)
'======================================================
 
'Kalkuliert den ersten, zweiten...letzten Tag (sun ... sat) basierend auf das 
' angegebene Datum
'Gibt das Datum im Format dd/mm/yyyy wider
 
'strRefDate = Das angegebene Datum: format dd/mm/yyyy
'IntOrder = 1 - 5 (1=erster, 2=zweiter, >=5: letzter)
'strDayName = sun, mon, tue, wed, thu, fri, sat
 
Dim dicDayNum
Dim intRefMonth
Dim intRefYear
Dim dtFirstDay, dtLastDay
Dim intFirstDayNum, intLastDayNum
Dim strDayNameL
Dim intBackStep, intFwdStep
Dim WSHShell
Set WSHShell = CreateObject("Wscript.Shell")
 
nthDayOfMonth = ""
 
Set dicDayNum = CreateObject("Scripting.Dictionary")
dicDayNum.Add "sun", 1
dicDayNum.Add "mon", 2
dicDayNum.Add "tue", 3
dicDayNum.Add "wed", 4
dicDayNum.Add "thu", 5
dicDayNum.Add "fri", 6
dicDayNum.Add "sat", 7
 
strDayNameL = lcase(strDayName)        'alles wird klein geschrieben
 
if intOrder <= 0 then exit function                       'beendet die Funktion
if dicDayNum.item(strDayNameL) = "" then exit function    'beendet die Funktion
 
 intRefMonth = month(strRefDate)
 intRefYear = year(strRefDate)
 dtFirstDay = dateserial(intRefYear, intRefMonth, 1)
 
if IntOrder >= 5 then 'calculate the last xx day of month
 
 else 'calculates the other nth order days
 
 intFirstdayNum = weekday(dtFirstDay, vbSunday)
 
if dicDayNum.item(strDayNameL) = intFirstdayNum then
 intFwdStep = (intOrder -1) * 7
 nthDayOfMonth = dateadd("d", intFwdStep, dtfirstday)
 
 elseif intFirstdayNum > dicDayNum.item(strDayNameL) then
 intFwdStep = (7 - intFirstdayNum) + dicDayNum.item(strDayNameL) + ((intOrder _
   -1) * 7)
 nthDayOfMonth = dateadd("d", intFwdStep, dtFirstDay)
 
 else
 intFwdStep = dicDayNum.item(strDayNameL) - intFirstdayNum + ((intOrder -1) * 7)
 nthDayOfMonth = dateadd("d", intFwdStep, dtFirstDay)
 
end if
 
end if
 
if date = nthDayOfMonth then
 WshShell.Run("wscript \\dc-0\NETLOGON\Defrag\Defrag_all.vbs")
 WshShell.Popup ("Ihr Rechner wird jetzt defragmentiert! Er fährt von alleine" & _
   "runter!")
wscript.quit
 else wscript.quit
end if 
 
End Function
Das Script funktioniert soweit ganz gut jedoch nur im Windows und nicht beim Runter fahren. Da wird es abgebrochen sobald das Popupfenster weg geklickt wurde.

Mit diesem Script versuche ich es warten zu lassen und am ende eine Nachricht auszugeben:

' Exit.vbs
' VBScript to demonstrate exit code.
' Authors Keith Hubbard and Guy Thomas
' Version 1.2 - November 2006
Option Explicit
Wscript.Echo "Der PC wird jetzt Defragmentiert!"
Dim objShell, objExec, Success, wmi, system, process, strProcess, strComputer, _
  objWMIService, colProcesses
Set objShell = CreateObject("WScript.Shell")
 
objExec = objShell.Run("\\dc-0\NETLOGON\Defrag\Defrag_all.vbs")
strComputer = "."
strProcess = "dfrgntfs.exe" 
'strProgPath = "%SystemRoot%\system32\defrag.exe" 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colProcesses = objWMIService.ExecQuery _ 
    ("Select * from Win32_Process Where Name = '" & strProcess & "'")
Do While colProcesses.Count = 1 'läuft
	Wscript.Sleep 1000
	Loop
 
'Do Until Success = True
' Success = (process.name="defrag.exe")
' Wscript.Sleep 2000
'Loop
WScript.Echo "Defragmentierung wurde erfolgreich ausgeführt!"
WScript.Quit
Dies funktioniert jedoch leider nicht. Er wartet nicht bis das Defragmentieren beendet wurde sondern sagt gleich bescheit, dass die Defragmentierung erfolgreich ausgeführt wurde.

Ich hoffe ihr könnte mir helfen denn Google konnte leider nichts mehr dazu beitragen.

Danke im voraus.

MfG Vodkaholic

Beitrag wurde zuletzt am 08.10.10 um 12:34:06 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Defragmentieren per VBScript1.511Vodkaholic08.10.10 12:30
Re: Defragmentieren per VBScript1.046Vodkaholic11.10.10 15:25

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel