2011-01-24 111 views
0

我遇到了趋势防毒墙网络版模式填充C:\驱动器(没有其他驱动器可用来更改目录)的问题,我得到权限被拒绝访问“C:\ Program Files \趋势科技\防毒墙网络版\ PCCSRV \ WSS \模式“运行下面的脚本。由于我将这个脚本用于少数几个网站,并且为了让我的同事很容易实现,所以我不想再添加各种权限。vbscript filesystemobject权限被拒绝

我试过改变:PatternLocation = (strValue & "WSS\patterns\")PatternLocation = ("""" & strValue & "WSS\patterns\"""),我得到'找不到路径'。是否有任何VBScript专家可以推荐模拟方法来克服拒绝的权限?

' Variable to locate HLM. 
const HKEY_LOCAL_MACHINE = &H80000002 
Set fso = CreateObject("Scripting.FileSystemObject") 

' Checks if the operating system is x86 or x64 
Set objShell = CreateObject("WScript.Shell") 
osType = objShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") 

' The dot refers to the computer this vbscript has been run on. 
strComputer = "." 

' Provides connection to the registry. 
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
strComputer & "\root\default:StdRegProv") 

' Checks the bit for the operating system 
If osType = "x86" Then 
    ' Checks registry for Trend folder path. 
    strKeyPath = "SOFTWARE\TrendMicro\OfficeScan\Service\Information" 
Elseif osType = "AMD64" Then 
    strKeyPath = "SOFTWARE\Wow6432Node\TrendMicro\OfficeScan\service\Information" 
End if 

trValueName = "Local_Path" 
objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue 

' If the registry path is empty it won't install the scheduled task and alert you. 
If IsNull(strValue) Then 
    msgbox("Trend Micro is not installed.") 
else 
    PatternLocation = (strValue & "WSS\patterns\") ' folder to start deleting (subfolders will also be cleaned) 
    OlderThanDate = DateAdd("d", -2, Date) ''# 2 days (adjust as necessary) 
    DeleteOldFiles PatternLocation, OlderThanDate 
end if 

Function DeleteOldFiles(folderName, BeforeDate) 
    Dim folder, file, fileCollection, folderCollection, subFolder 

    Set folder = fso.GetFolder(folderName) 
    Set fileCollection = folder.Files 
    For Each file In fileCollection 
     If file.DateLastModified < BeforeDate Then 
      fso.DeleteFile(file.Path) 
      End If 
    Next 

    Set folderCollection = folder.SubFolders 
    For Each subFolder In folderCollection 
     DeleteOldFiles subFolder.Path, BeforeDate 
    Next 
End Function 
+0

什么是从注册表项中返回的实际路径值? – unrealtrip 2011-01-24 23:03:45

回答

0

这是一个任何人一些改变谁可能会发现它有用的工作脚本:

'Variable to locate HLM. 
const HKEY_LOCAL_MACHINE = &H80000002 
Set fso = CreateObject("Scripting.FileSystemObject") 

'Checks if the operating system is x86 or x64 
Set objShell = CreateObject("WScript.Shell") 
osType = objShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") 

'The dot refers to the computer this vbscript has been run on. 
strComputer = "." 

'Provides connection to the registry. 
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
strComputer & "\root\default:StdRegProv") 

'Checks the bit for the operating system 
If osType = "x86" Then 
       'Checks registry for Trend folder path. 
       strKeyPath = "SOFTWARE\TrendMicro\OfficeScan\Service\Information" 
Elseif osType = "AMD64" Then 
       strKeyPath = "SOFTWARE\Wow6432Node\TrendMicro\OfficeScan\service\Information" 
End if 
       strValueName = "Local_Path" 
       objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue 



'If the registry path is empty it won't install the scheduled task and alert you. 
If IsNull(strValue) Then 
       msgbox("Trend Micro is not installed.") 

else 

       PatternLocation = (strValue & "WSS\patterns") ' folder to start deleting (subfolders will also be cleaned) 
       'msgbox(PatternLocation)   
end if 


startFolder = PatternLocation 
OlderThanDate = DateAdd("d", -1, Date) ' 1 days 
DeleteOldFiles startFolder, OlderThanDate 
DeleteEmptyFolders startFolder 

Function DeleteOldFiles(folderName, BeforeDate) 
Dim folder, file, fileCollection, folderCollection, subFolder 
Set folder = fso.GetFolder(folderName) 
Set fileCollection = folder.Files 
For Each file In fileCollection  
If file.DateLastModified < BeforeDate Then   
fso.DeleteFile(file.Path) 
End If 
Next 
Set folderCollection = folder.SubFolders 
For Each subFolder In folderCollection  
DeleteOldFiles subFolder.Path, BeforeDate 
Next 
End Function 
Function DeleteEmptyFolders(foldername) 
For Each Folder In fso.GetFolder(foldername).SubFolders  
DeleteEmptyFolders(Folder.Path)  
If Folder.Files.Count = 0 and Folder.SubFolders.Count = 0 Then   
fso.DeleteFolder(Folder.Path) 
End If 
Next 
End Function