0

我正在尝试开发一个 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
4

1 回答 1

1

用于Option Explicit避免错误,例如

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

想想名称(变量、文件)和内容(变量、文件)之间的区别。

编写一个简单的测试脚本,将 InStr() 应用于文件/文件的每一行

于 2017-12-09T20:42:40.500 回答