【问题标题】:VBscript for cleaning up IIS logs has runtime error用于清理 IIS 日志的 VBscript 出现运行时错误
【发布时间】:2020-03-03 07:55:39
【问题描述】:

我有一个用于压缩旧 IIS 日志文件的 VBScript。我不断收到此错误:

Microsoft VBScript 运行时错误:无法创建 ActiveX 组件 对象:'GetObject'

这是错误所在的行:

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

我不确定这意味着什么。

尝试了我发现的here,但我无法让任何东西在 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

我是管理员,所以权限不是问题。有什么想法吗?

【问题讨论】:

  • "IIS://LOCALHOST" 不是 ActiveX 组件,如错误所示。你想用objIISOuter 对象做什么?
  • 您应该切换到 PowerShell。如果您坚持使用 VBScript,则必须在您的 IIS 安装中启用 IIS 6 兼容性,否则将无法正常工作。
  • @ÉtienneLaneville 我正在尝试获取日志文件以压缩它们。编辑应该更多地解释发生了什么
  • @LexLi 我认为 IIS 6 兼容性已启用。是的,我宁愿在 powershell 中执行此操作,但如果我可以修复此脚本,那将是首选
  • 在我看来,您可以直接使用“%SystemDrive%\inetpub\logs\LogFiles”路径作为日志文件夹路径,然后您可以使用Scripting.FileSystemObject 删除该文件夹。更多细节你可以参考这个article

标签: iis vbscript runtime-error iis-logs


【解决方案1】:

这里有两种可能的方法:

使用 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 从文件夹中删除文件:

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

【讨论】:

  • 有趣,IIS://LocalHost 路径不起作用有什么原因吗? %SystemDrive%\inetpub\logs\LogFiles 会吗?两者不应该是同一件事吗?
  • 我不熟悉使用GetObject("IIS://LOCALHOST/W3SVC") - 这会返回什么? - 所以我建议了一种我理解并且应该也可以工作的方法。
猜你喜欢
  • 2017-12-18
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2018-09-02
  • 2016-11-28
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多