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 应用程序池管理的评论员。我现在可以自动执行一些操作,以确保我的应用程序池正常运行 运行 ;)
我在机器上使用本地 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 应用程序池管理的评论员。我现在可以自动执行一些操作,以确保我的应用程序池正常运行 运行 ;)