2017-12-09 4 views
0

Ich versuche ein VBS-Skript zu entwickeln, das Backups mit shadowcopy.exe erstellt und sie mit rsync an ein bestimmtes Ziel kopiert. Es gibt Protokolldateien, die für die rsync-Kopierprozedur vom selben Skript erstellt werden und für bestimmte Wörter (wie "error" oder "failed") überprüft werden.Problem mit InStr - Shadow-Copy Script mit Protokollierung und Fehlerprüfung

Das Problem, das ich jetzt habe, ist, dass ich nicht weiß, wie man die Protokolldateien überprüft/die spezifischen Schlüsselwörter ausliest.

Ich lese, dass InStr eine Möglichkeit ist, mein Problem zu lösen, aber ich weiß nicht, wie man es benutzt, um meine Schlüsselwörter zu definieren, sie herauszulesen und sie mit meinem Mailalarm zu kombinieren. Vielleicht hat jemand einen Rat für mich?

Mein Code so weit:

Dim oEmail, oConf 
Dim authuser, authpass, smtpserver 
Dim recipient,sender,subject,message 
Dim ObjFso 
Dim FIL_LOG 
Dim response 

'Angaben zur Quelle und Ziel 
quelle = "c:\vshadow" 'beispiel c:\vshadow 
ziel = "/cygdrive/c/users/example/desktop/test/" 'beispiel /cygdrive/c/users/example/desktop/test/ 

'angaben zu den emails die verschickt werden wollen 
authuser = "[email protected]" 
authpass = "123" 
smtpserver = "server" 
recipient = "[email protected]" 
sender = "[email protected]" 
subject = "Test E-Mail" 
message1 = "Schattenkopie konnte nicht erstellt werden" 
message2 = "rsync befehl ist durchgelaufen" 
message3 = "rsync ist abgebrochen" 

'für den email versand benötigte daten 
Set oEmail = CreateObject("CDO.Message") 
Set oConf = CreateObject("CDO.Configuration") 

oConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
oConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
oConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = smtpserver 
oConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 
oConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = authuser 
oConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = authpass 
oConf.Fields.Update 

'Schattenkopie erstellen 
Const CONTEXT = "ClientAccessible" 

Set Args = WScript.Arguments 
If Args.Count() > 0 Then 
    VOLUME = Args.item(0) 
Else 
    VOLUME = "C:\" 
End If 

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set objShadowStorage = objWMIService.Get("Win32_ShadowCopy") 

errResult = objShadowStorage.Create(VOLUME, CONTEXT, strShadowID) 

'falls schattenkopie nicht erstellt werden kann email mit Fehlermeldung, sonst gehts 
'weiter 
If errResult <> 0 Then 
    oEmail.Configuration = oConf 
    oEmail.To = recipient 
    oEmail.From = sender 
    oEmail.ReplyTo = sender 
    oEmail.Subject = subject 
    oEmail.HTMLBody = message1 
End If 

'Mounted die Schattenkopie und Kopiert per Rsync 
Set WshShell = WScript.CreateObject("WScript.Shell") 

WshShell.Run "%COMSPEC% /C ShadowSpawn.exe " & quelle & _ 
    " t: rsync -rltDv --log-file=rsync.log--link-dest=/" & ziel & _ 
    "/%last_run% /cygdrive/t/* " & ziel & _ 
    " > c:\users\example\desktop\vbs\rsync\bin\vss1.log ", 0, True 

''''''''''''''''''''' 
'Hier möchte ich die gerade erstelle log Datei auf Stichwörter wie z.B error 
'untersuchen. Falls error in der log datei vorhanden ist soll es mir eine Abbruch 
'mail schicken. Ansonsten eine email das alles gut durchgelaufen ist 

ergenbis = InStr(1, vss1, error, 1) 

'If Ergebnis <> 0 Then 'Email verschicken das alles durchgelaufen ist 
    oEmail.Configuration = oConf 
    oEmail.To = recipient 
    oEmail.From = sender 
    oEmail.ReplyTo = sender 
    oEmail.Subject = subject 
    oEmail.HTMLBody = message2 
Else 'abbruchmail verschicken 
    oEmail.Configuration = oConf 
    oEmail.To = recipient 
    oEmail.From = sender 
    oEmail.ReplyTo = sender 
    oEmail.Subject = subject 
    oEmail.HTMLBody = message3 
End If 

oEmail.Send 

Set oConf = Nothing 
Set oEmail = Nothing 

Antwort

1

Verwenden Option Explicit Fehler zu vermeiden, wie

ergenbis = instr(1, vss1, error, 1) 
if Ergebnis <> 0 then 'Email verschicken das alles durchgelaufen ist 

über den Unterschied zwischen Namen Denken (Variable, Datei) und Inhalt (Variable, Datei).

Schreiben Sie ein einfaches Testskript, das InStr() auf eine Datei/jede Zeile einer Datei anwendet