VBscript для очистки журналов IIS имеет ошибку во время выполнения - PullRequest
1 голос
/ 06 ноября 2019

У меня есть VBScript для архивации старых файлов журнала IIS. Я продолжаю получать эту ошибку, хотя:

Ошибка времени выполнения Microsoft VBScript: компонент ActiveX не может создать объект: 'GetObject'

Это строка, в которой он ошибается:

Set objIISOuter = GetObject("IIS://LOCALHOST")

Я не уверен, что это значит.

Попробовал то, что нашел здесь , и я не смог запустить что-либо с 32 или 64 битами.

Я где-то читал, что это может быть проблемой из-за того, что DLL не зарегистрирована, но я не знаю, как это может быть проблемой здесь, хотя может быть и неправильным.

For Each objWebOuter in objIISOuter
  If LCase(objWebOuter.Class) = "iiswebservice" Then
    Set objIIS = GetObject("IIS://LOCALHOST/W3SVC")
    For Each objWeb in objIIS
      If LCase(objWeb.Class) = "iiswebserver" Then
        Call DeleteLogFiles( _
          objWeb.LogFileDirectory & "\W3SVC" & objWeb.Name, _
          intZipAge, intDelAge)
      End If

IЯ администратор, поэтому разрешения не проблема. Есть идеи?

1 Ответ

1 голос
/ 07 ноября 2019

Вот два возможных подхода:

Используйте FileSystemObject для получения папки LogFiles и удаления файлов:

sLogFolder = "%SystemDrive%\inetpub\logs\LogFiles"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sLogFolder)

For Each objSubfolder In objFolder.SubFolders
    DeleteFiles objSubfolder.Path, 10
Next

Другой подход:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objIIS = GetObject("winmgmts:root\WebAdministration")
Set objSites = objIIS.InstancesOf("Site")

For Each objSite In objSites
    DeleteFiles objSite.LogFile.Directory & "\w3svc\" & objSite.ID, 10
Next

Оба подходаиспользуйте следующую подпрограмму для удаления файлов из папки:

Sub DeleteFiles(p_sFolder, p_iMaxAge)
    Dim objFSO
    Dim objFolder
    Dim objFile
    Dim iFileAge

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(p_sFolder)

    If objFolder Is Nothing Then Exit Sub

    For Each objFile In objFolder.Files
        iFileAge = Now - objFile.DateCreated
        If iFileAge > (p_iMaxAge) Then
            objFSO.DeleteFile objFile, True
        End If
    Next

End Sub
...