初学者VBscript:压缩日志文件的脚本

初学者VBscript:压缩日志文件的脚本,vbscript,zip,logfiles,Vbscript,Zip,Logfiles,我的脚本没有实际生成zip文件,这是一个问题。当我测试脚本时,路径设置如下: C:\Users\Bob\Desktop\Folder1\Folder2 如果文件夹1中的测试日志文件超过7天,则会被删除,并压缩并移动到文件夹2,这样它将运行得非常好。它将生成包含所有日志文件的压缩文件,并具有正确的命名集 所以我知道,至少脚本的逻辑是这样的 我的问题是,我需要这个脚本来检查机器上的安全日志,删除任何超过7天的日志,然后压缩剩余的日志并发送到已装载的共享驱动器。当我将路径更改为以下内容时: C:\Wi

我的脚本没有实际生成zip文件,这是一个问题。当我测试脚本时,路径设置如下:

C:\Users\Bob\Desktop\Folder1\Folder2

如果文件夹1中的测试日志文件超过7天,则会被删除,并压缩并移动到文件夹2,这样它将运行得非常好。它将生成包含所有日志文件的压缩文件,并具有正确的命名集

所以我知道,至少脚本的逻辑是这样的

我的问题是,我需要这个脚本来检查机器上的安全日志,删除任何超过7天的日志,然后压缩剩余的日志并发送到已装载的共享驱动器。当我将路径更改为以下内容时:

C:\Windows\System32\Config日志所在的位置

PathLogs = "C:\Windows\System32\config"  
它仍然会删除任何超过7天的日志文件,但不会生成包含任何剩余日志的zip文件。它什么也不做,即使脚本不产生错误。我一直在想办法解决这个问题,但我的代码却没有得到验证。如果有人能看看我的经历,让我知道我在哪里误入歧途,那将是非常有帮助的

提前谢谢,下面是脚本

“先读 "---------------------------------------------

Option Explicit

Dim oFSO, oFolder, sDirectoryPath 
Dim oFileCollection, oFile, sDir 
Dim iDaysOld 
'第14-53行删除任何超过7天的日志文件。更改iDaysOld=中的值将更改保存或删除文件的时间范围。 '如果不需要删除文件,则可以取出脚本的这一部分,并且存档/移动功能仍将保持不变

'第57-102行包含压缩日志文件并将其发送到新文件夹的功能。压缩后的文件以localhost命名,并在文件名后附加日期/时间戳

"---------------------------------------------

Option Explicit

Dim oFSO, oFolder, sDirectoryPath 
Dim oFileCollection, oFile, sDir 
Dim iDaysOld 
'指定要从中清除旧文件的目录路径

sDirectoryPath = "C:\Windows\System32\config"
'指定要删除的文件的天数

iDaysOld = 7

Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oFolder = oFSO.GetFolder(sDirectoryPath) 
Set oFileCollection = oFolder.Files 

For each oFile in oFileCollection
'指定要删除的文件的扩展名 '和文件扩展名中包含字符数的数字

If LCase(oFSO.GetExtensionName(oFile.Name)) = "log" Then

    If oFile.DateLastModified < (Date() - iDaysOld) Then 
    oFile.Delete(True) 
    End If 

End If   
Next 



Set oFSO = Nothing 
Set oFolder = Nothing 
Set oFileCollection = Nothing 
Set oFile = Nothing 



WScript.Echo "Press to start zipping log files."

Dim objFile, objPath, objFolder, Command, PathLogs, RetVal
Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objShell: Set objShell = CreateObject("WScript.Shell")
Dim d : d = Date() 
Dim dateStr : dateStr = Year(d) & "-" & Right("00" & Month(d), 2) & "-" & Right("00" &      Day(d), 2)
Dim t : t = Time()
Dim timeStr: timeStr = Hour(t) & "-" & Right("00" & Minute(t), 2) & "-" & Right("00" &    Second(t), 2)
'在日志和zip之间循环

Set objPath = objFSO.GetFolder(PathLogs)
For Each objFile In objPath.Files




If (LCase(objFSO.GetExtensionName(objFile)) = "log") Then

    ' zip files

Command = """C:\Program Files\7-zip\7z.exe"" a " & PathLogs & "%computername%" & "-" & dateStr & "-" & timeStr & ".zip " & PathLogs & objFile.Name 


RetVal = objShell.Run(Command,0,true)

End If

Next

WScript.Echo "Zip Successful."

 WScript.Echo "Now Moving Zipped Files into Archived Folder"

    'move files

Set objFSO = CreateObject("Scripting.FilesystemObject")
objFSO.MoveFile "C:\Windows\System32\config\*.zip" , "C:\Testscripts\testfolder\Archived"

WScript.Echo "Move Successful."

我可能会尝试回显7zip命令行,检查它是否正确,然后从脚本运行所在的位置手动运行它。当您看到它时,它可能看起来有问题,或者7zip可能会给您一条消息来指示发生了什么。

您可能会受到UAC限制,为什么不尝试在c:\windows之外的另一个文件夹中创建zip文件,看看是否在那里创建了文件?这是我最初的想法,但它通常不会返回特权错误?我更改了注册表,在vbs文件中添加了“以管理员身份运行”选项,并尝试了该操作,但仍然没有成功。现在我只是让它在路径中查找.log文件,然后告诉它压缩找到的任何文件。它将zip默认设置为它以前在其中找到任何.log文件的文件夹。我不太确定让它创建zip文件elsewhereuse-o的语法,就像这样。。。7z x archive.zip-oC:\DocTried此文件。我不断收到大量关于我甚至没有告诉7zip查看的内容被拒绝访问的提示。例如Users\ReportServer$SQLEXPRESS\Templates:访问被拒绝。当我输入的命令是C:\Program Files\7-zip\7z.exe a C:\testscripts\asdf\.log-oC:\testscripts\asdf2有什么想法吗?当我在命令行运行此命令时:C:\>\Program Files\7-zip\7z.exe a C:\Windows\Systems32\config\!*。日志我得到了大量的访问被拒绝返回值上的一堆不同的文件。一旦检查完所有文件,就会显示警告找不到471个文件错误7-Zip无法打开文件C:\Windows\System32\config\!*。记录文件名、目录名或卷标语法不正确。系统错误:未指定的错误。所以我假设这意味着这是一个UAC问题?感叹号应该是一个通配符符号还是文件名的第一个字符?不确定它是否会引起问题。