我正在使用机器上的本地VBScript管理我的IIS应用程序池,或者通过运行在高特权身份下的ASP页面。
Microsoft文档列出了ApplicationPool类对象在此页https://msdn.microsoft.com/fr-fr/library/ms690608上的所有可用属性和方法。
虽然我能够使用.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发布于 2018-02-07 07:59:22
这里是解决方案:)
正如@Kul在评论中指出的那样,我连接到了错误的名称空间,并查询了错误的对象类。
命名空间
用于查询的对象类
因此,使用Vbscript或ASP中的WMI管理IIS应用程序池的正确工作代码如下:
'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指出了所需语法上的根本差异,并感谢所有其他评论员帮助我完善IIS管理。我现在能够自动执行一些操作,以确保我的应用程序池已经启动,好,并且正在运行;)
https://stackoverflow.com/questions/48628772
复制相似问题