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. |