我正在尝试开发一个VBS脚本,该脚本使用shadowcopy.exe
创建备份,并使用rsync将它们复制到特定目标。
有一些日志文件将由同一个脚本创建用于rsync复制过程并获取
检查特定单词(例如"错误"或"失败")。
我现在遇到的问题是我不知道如何检查日志文件/读出特定关键字。
我读到InStr
有可能解决我的问题,但我不知道如何使用它来定义我的关键字,将其读出并将其与我的邮件提醒相结合。也许有人对我有建议?
到目前为止我的代码:
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 = "example@example.de"
authpass = "123"
smtpserver = "server"
recipient = "example@example.de"
sender = "rsync@test.de"
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
答案 0 :(得分:1)
使用Option Explicit
来避免像
ergenbis = instr(1, vss1, error, 1)
if Ergebnis <> 0 then 'Email verschicken das alles durchgelaufen ist
考虑名称(变量,文件)和内容(变量,文件)之间的区别。
编写一个简单的测试脚本,将InStr()应用于文件/文件的每一行