ApplicationPool Class 对象属性在 WMI 中不可用

ApplicationPool Class Object properties not available in WMI

我在机器上使用本地 VBScript 管理我的 IIS 应用程序池,或者通过 ASP 页面 运行 在高权限身份下。

Microsoft 文档在本页 https://msdn.microsoft.com/fr-fr/library/ms690608.

上列出了 ApplicationPool Class 对象的所有可用属性和方法

尽管我可以使用 .Recycle.Start.Stop方法,以及 .Name 属性,所有其他方法和属性都不可用于应用程序池,例如 .GetState.AutoStart, .ManagedPipelineMode...

文档损坏了吗?

'For VBSCRIPT
Set o_Wbem_Locator = CreateObject("WbemScripting.SWbemLocator")
Set o_Wbem_Service = o_Wbem_Locator.ConnectServer("MyServerName", "root/MicrosoftIISv2")
Set o_Wbem_AppPoolsCollection = o_Wbem_Service.ExecQuery("SELECT * FROM IISApplicationPool")
For Each o_Wbem_AppPoolInstance In o_Wbem_AppPoolsCollection
    'Work
    o_Wbem_AppPoolInstance.Recycle

    'Work
    WScript.Echo o_Wbem_AppPoolInstance.Name

    'DOES NOT Work
    WScript.Echo o_Wbem_AppPoolInstance.GetState

    'DOES NOT Work
    WScript.Echo o_Wbem_AppPoolInstance.ManagedPipelineMode
Next

这是解决方案:)

正如 @Kul-Tigin 在评论中所述,我连接到错误的命名空间,并查询了错误的对象 Class.

命名空间

  • "root/MicrosoftIISv2"适用于IIS 6
  • "root/WebAdministration" 适用于 IIS 7 [及更高版本]

要查询的对象CLASS

  • "SELECT * FROM IISApplicationPool"适用于IIS 6
  • "SELECT * FROM ApplicationPool" 适用于 IIS 7 [及更高版本]

因此,使用 Vbscript 或 ASP 中的 WMI 管理 IIS 7+ 应用程序池的正确工作代码如下:

'For VBSCRIPT
Set o_Wbem_Locator = CreateObject("WbemScripting.SWbemLocator")

'Suitable for IIS 6
'Set o_Wbem_Service = o_Wbem_Locator.ConnectServer("MyServerName", "root/MicrosoftIISv2")

'Suitable for IIS 7+
Set o_Wbem_Service = o_Wbem_Locator.ConnectServer("MyServerName", "root/WebAdministration")

'Suitable for IIS 6
'Set o_Wbem_AppPoolsCollection = o_Wbem_Service.ExecQuery("SELECT * FROM IISApplicationPool")

'Suitable for IIS 7+
Set o_Wbem_AppPoolsCollection = o_Wbem_Service.ExecQuery("SELECT * FROM ApplicationPool")


For Each o_Wbem_AppPoolInstance In o_Wbem_AppPoolsCollection
    'Works in IIS 6 and in IIS 7+
    o_Wbem_AppPoolInstance.Recycle    

    'Works in IIS 6 and in IIS 7+
    WScript.Echo o_Wbem_AppPoolInstance.Name    

    'DOES NOT Work in IIS 6
    'Works in IIS 7+
    WScript.Echo o_Wbem_AppPoolInstance.GetState    

    'DOES NOT Work in IIS 6
    'Works in IIS 7+
    WScript.Echo o_Wbem_AppPoolInstance.ManagedPipelineMode
Next

衷心感谢 @Kul-Tigin 指出所需语法中的这一根本差异,非常感谢所有其他帮助我改进 IIS 应用程序池管理的评论员。我现在可以自动执行一些操作,以确保我的应用程序池正常运行 运行 ;)