Jump to content

Defrag per Script unter XP


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hier ein Beispiel-Script, das die Fragmentierung nur überprüft (durch den Schalter -a beim defrag) und das kpl. Ergebnis ausgibt.

Ggf. könnte aus diesem Ergebnis der Prozentwert rausgepriemelt und weiter verarbeitet werden.

Ergebnis ist abhängig von der Defrag-Version (unter Vista siehts z.B. anders aus als unter XP)

 

   Set WSHShell = WScript.CreateObject("WScript.Shell")

   Set fso = CreateObject("Scripting.FileSystemObject")
   strergebnis = ""
   FileName = "defrag.txt"
   temp = fso.GetSpecialFolder(2).Path
   WshShell.run "cmd.exe /C DEFRAG.EXE C: -a > " & temp & "\" & FileName, 0, true

   Set file = fso.OpenTextFile(temp & "\" & FileName)
   strergebnis = file.readAll
   file.Close
   Set file = Nothing
   Set fso = Nothing

MsgBox strErgebnis

Link zu diesem Kommentar
  • 2 Wochen später...

Hallo zusammen

 

so das funktioniert wunderbar und schreibt es in die entsprechende spalte von sql. Habe je eine Spalte für LW c:, D:, E: gemacht. nun bekomme ich den ganzen text in die spalte und zwar so:

 

Windows Disk Defragmenter

Copyright © 2003 Microsoft Corp. and Executive Software International, Inc.

 

Analysis Report

29.30 GB Total, 15.80 GB (53%) Free, 13% Fragmented (26% file fragmentation)

 

You should defragment this volume.

 

...nun ist das ziel dies aber in eine andere spalte einzufügen, die mir sagt, soll defragmeniert werden oder nicht auf einen blick, sprich true/fals

 

soll ich die abfrage in sql selber machen oder im script?

und wen sql wie oder im script mit if not exist?

 

gruss bergesel

Link zu diesem Kommentar

Solltest du es mit meinem Ansatz per VB-Script gemacht haben, könntest Du einfach den entspr. String suchen für ne Entscheidung.

Z.B. so:

...
   Set file = fso.OpenTextFile(temp & "\" & FileName)
   strergebnis = file.readAll
   If Instr(strErgebnis, "You should defragment this volume") > 0 then boolDefrag = true else boolDefrag = False
...

... und die Variable boolDefrag dann entspr. in deine Datenbank schreiben.

Link zu diesem Kommentar

..geht nicht so wie ich das denke :)

 

jetzt hab ich ein durcheinander mit den variablen :)

bekomme diese meldung: input past end of file!

 


Set WSHShell = WScript.CreateObject("WScript.Shell")

 

Set fso = CreateObject("Scripting.FileSystemObject")

strergebnis = ""

FileName = "cdefrag.txt"

temp = fso.GetSpecialFolder(2).Path

 

WshShell.run "cmd.exe /C DEFRAG.EXE C: -a > " & temp & "\" & FileName, 0, true

 

 

Set file = fso.OpenTextFile(temp & "\" & FileName)

strergebnis = file.readAll "hier soll der fehler sein"

If Instr(strErgebnis, "You should defragment this volume") > 0 then boolDefrag = true else boolDefrag = False

 

file.Close

Set file = Nothing

Set fso = Nothing

 

set db = CreateObject("ADODB.Connection")

db.Open("Provider=SQLOLEDB.1;Data Source=Server; Trusted_Connection=Yes;Initial Catalog=wartung;User ID=sa;Password=xxx;")

sql = "use wartung;"

 

db.Execute(sql)

sql = "insert into wartung (cdefrag)"

sql = sql & "values ('" & boolDefrag & "');"

db.Execute(sql)

Link zu diesem Kommentar

Hmmm... bei mir läufts.

Hast evtl. zweimal gestartet? Der Defrag läuft ja erst mal ne Weile, bevor er Daten rausspuckt!

Evtl. sollte man da eine kl. Routine mit einbauen, die das prüft/verhindert. Ich bastel mal.

 

Mal was anderes: Du schreibst einfach in eine Tabelle mit einer Spalte die Werte true oder false... und woher weisst du dann, zu welchem Rechner das gehört? Oder hat jeder seine eigene Tabelle "Wartung" (was ich Datenbankdesigntechnisch jedoch für abwegig halten würde ;) )?

Link zu diesem Kommentar

...also ich post hier mal mein bis jetzt zusammen gebasteltes script.

 

also achtung kann lustig werden!! :) dies funktioniert mit sql!

 

'Abfrage der Zeit Datum

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")
For Each objItem in colItems
'Die Variablen dazu

dim day              
dim week
dim hour
dim minute
dim month
dim quarter
dim second
dim weekinmonth
dim year
'Gesetzte Variablen
day = objItem.Day
week = objItem.DayOfWeek
hour = objItem.Hour
minute = objItem.Minute
month = objItem.Month
quarter = objItem.Quarter
second = objItem.Second
weekinmonth = objItem.WeekInMonth
year = objItem.Year
next
'Ende der Zeit und Datum Abfrage

'Abfrage der Variable CSV-System
'strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Environment")
For Each objItem in colItems
'Variablen setzen
dim systemname
dim systemwert
systemname = objItem.Name
systemwert = objItem.VariableValue
'Abfrage
If systemname = "CSVSystem" then
csv = systemwert
end if
next
'Ende der Variablen Auslesen

'Anfang der Hostabfrage
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem",,48)
For Each objItem in colItems
'Variablen setzen
dim computername
computername = objItem.DNSHostName
'Ende der Hostabfrage

'Defrag Analyse von C: Laufwerk
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
strergebnisc = ""
FileName = "cdefrag.txt"
temp = fso.GetSpecialFolder(2).Path
WshShell.run "cmd.exe /C DEFRAG.EXE C: -a > " & temp & "\" & FileName, 0, true    
Set file = fso.OpenTextFile(temp & "\" & FileName)
strergebnisc = file.readAll
cdefrag = strErgebnisc
file.Close
Set file = Nothing
Set fso = Nothing
'Defrag Analyse von D: Laufwerk
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
strergebnisd = ""
FileName = "ddefrag.txt"
temp = fso.GetSpecialFolder(2).Path
WshShell.run "cmd.exe /C DEFRAG.EXE D: -a > " & temp & "\" & FileName, 0, true 
Set file = fso.OpenTextFile(temp & "\" & FileName)
strergebnisd = file.readAll
ddefrag = strErgebnisd
file.Close
Set file = Nothing
Set fso = Nothing
'Defrag Analyse von E: Laufwerk
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
strergebnise = ""
FileName = "edefrag.txt"
temp = fso.GetSpecialFolder(2).Path
WshShell.run "cmd.exe /C DEFRAG.EXE E: -a > " & temp & "\" & FileName, 0, true   
Set file = fso.OpenTextFile(temp & "\" & FileName)
strergebnise = file.readAll
edefrag = strErgebnise
file.Close
Set file = Nothing
Set fso = Nothing
'Ausführen der SQL Befehle und schreiben in die Spalten
set db = CreateObject("ADODB.Connection")
db.Open("Provider=SQLOLEDB.1;Data Source=server; Trusted_Connection=Yes;Initial Catalog=wartung;User ID=sa;Password=xxxx;")
sql = "use wartung;"
set rs = db.Execute(sql)

sql = "insert into wartung (day, year, dayofweek, hour, minute, month, quarter, second, weekinmonth, computername, csv,cdefrag,ddefrag,edefrag)"
sql = sql & "values ('" & day & "','" & year & "','" & week & "','" & hour & "','" & minute & "','" & month & _
"','" & quarter & "','" & second & "','" & weekinmonth & "','" & computername & "','" & csv & "','" & _
strErgebnisc & "','" & strErgebnisd & "','" & strErgebnise & "');"
db.Execute(sql)
db.close
Next

...puah bin ich ein depp! hab vergessen das er am defrag macht und schon lange fertig ist und mir den report zeigen wollte. dabei immer versucht das script laufen zu lassen !!! ;-)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...