作者:Saad Ladki
介绍
本文档使用 IIS WebAdministration 命名空间演练站点管理,以此来介绍 WMI。 了解如何创建、删除、停止、启动和修改站点 - 所有任务都可以轻松转换为应用程序池和虚拟目录等对象。
使用 WMI,可以查看特定网站的属性,创建或删除站点,或查看服务器上的所有站点。 本文档将指导你完成与站点相关的大多数任务,并提供 WMI 的基本简介。
本文中的任务和章节包括:
对于其他对象(如 ApplicationPool),其中许多任务都以类似的方式执行。 阅读完本文后,可以挑战一下自己,看看是否可以运用在这里学到的内容来创建、删除和修改 ApplicationPool 对象。
本文档广泛使用 CIM Studio;如果不熟悉,请参阅 CIM Studio。
开始前
安装 IIS
必须安装 IIS 7.0 或更高版本才能完成本文档中的步骤。 如果可以浏览到 http://localhost/
并收到标准的 IIS“正在构建”页面,则 IIS 已安装到你的计算机上。 如果未安装 IIS,请参阅在 Windows Vista 上安装 IIS 以获取安装说明。
安装 WMI 提供程序
通过选择“管理工具”(或 Web 管理工具)下的“IIS 管理脚本和工具”组件来安装 IIS WMI 提供程序。 在 Windows Vista 中,这位于 Internet Information Services 下的“Windows 功能”对话框中。 在 Windows Server® 2008 上,位于 Web 服务器 (IIS) 角色下的服务器管理器中。
安装 WMI 工具(包括 CIM Studio)
安装 WMI 工具套件。
所需的权限和用户帐户控制 (UAC)
你必须是管理员才能连接到 WebAdministration WMI 命名空间。 这意味着你已以下列方式之一登录:
- Windows Server 2008 上的内置管理员帐户
- 管理员组的成员,并且你禁用了用户帐户控制 (UAC),或者
- 已启用管理员组成员和 UAC。
如果是第一种或第二种情况,则在本文中不会遇到任何权限问题。
如果是第三种情况,将遇到“拒绝访问”错误。 通过始终以管理员身份打开命令提示符并从提升的命令提示符启动 CIM Studio 来避免这些问题。
若要以管理员身份打开命令提示符窗口,请依次单击“开始”、“所有程序”、“附件”,右键单击“命令提示符”,然后选择“以管理员身份运行”。
若要从提升的命令提示符启动 CIM Studio:
- 以管理员身份打开命令提示符。
- 键入
%systemdrive%\Program Files\WMI Tools\studio.htm
,然后按 Enter。
创建备份
在开始之前备份重要的 IIS 配置文件,以便在完成后将系统还原到其原始状态。
- 打开命令提示符。
- 键入
%windir%\system32\inetsrv\appcmd add backup IIS7\_WMI\_CIMStudioLab
。
预期输出:
BACKUP object "IIS7_WMI_CIMStudioLab" added
- 完成后,通过以管理员身份打开命令提示符并键入
%windir%\system32\inetsrv\appcmd restore backup IIS7\_WMI\_CIMStudioLab
,将 IIS 还原到其原始状态。
预期输出:
Restored configuration from backup "IIS7_WMI_CIMStudioLab"
1.获取站点实例
要获取站点实例,请单击“开始”,单击“开始搜索”框,键入 notepad.exe,然后按 Enter。 将以下脚本行粘贴到记事本中:
Set oIIS = GetObject("winmgmts:root\WebAdministration")
单击“文件”、“另存为...”以打开“保存”对话框。 找到对话框底部的“另存为类型:”文本框,并将其值从“文本文档(*.txt)”更改为“所有文件”。 将文件另存为“GetSite.vbs”。
单击“开始”,单击“开始搜索”框,键入 cmd.exe,然后按 Enter。 键入 cd %SystemDrive%\Users\Administrator\Desktop,然后按 Enter。 键入 cscript //h:cscript,然后按 Enter。 这会将默认脚本宿主设置为 cscript.exe,后者会将其输出发送到从中启动它的命令窗口。 有关详细信息,请阅读从 Windows 运行脚本。
键入 GetSite.vbs,然后按 Enter。 如果脚本运行时没有错误,则表示已成功连接到“WebAdministration”命名空间。 有关“winmgmts:root\WebAdministration”字符串的详细信息,请阅读构造名字对象字符串。 我们将向 GetSite.vbs 脚本添加四行。 这四行脚本将获取 Default Web Site,然后通过打印其两个属性来确认成功。
Set oIIS = GetObject("winmgmts:root\WebAdministration")
Set oSite = oIIS.Get("Site.Name='Default Web Site'")
WScript.Echo "Retrieved an instance of Site "
WScript.Echo " Name: " & oSite.Name
WScript.Echo " ID: " & oSite.ID
返回到 cmd 提示符并运行 GetSite.vbs。 应会看到以下输出:
检索了站点的实例
名称:Default Web Site
ID:1
要了解“Get”的原理,请单击“开始”、“所有程序”、“WMI 工具”,最后单击“WMI CIM Studio”。 连接到 WebAdministration 命名空间(请参阅使用 CIM Studio 了解 IIS WMI 提供程序),并搜索 Site 类。 CIM Studio 中的右窗格显示 Site 的属性。 Name 属性位于键图标旁边,下面以红色圆圈显示。
类可以具有一个或多个“key”属性;由一个或多个键构成的集合用于唯一标识对象。 有关更多详细信息,请阅读描述实例对象路径。实际上,字符串“Site.Name='Default Web Site'”表示“获取 Site 对象的实例,其键属性 Name 等于“Default Web Site”。 如果可以理解这一点,请尝试一些更困难的内容。
2.获取应用程序实例
要获取应用程序实例,请打开 CIM Studio 并搜索 Application 类。 请注意,Application 类具有两个键属性:“SiteName”和“Path”,如以下屏幕截图所示。
单击“开始”,单击“开始搜索”框,键入 notepad.exe,然后按 Enter。 将以下脚本行粘贴到记事本中。 第二行脚本指定两个 Application 键属性的值。 请注意,此字符串的格式为:<object_name>.<key_property>='<value>',<key_property>='<value>,其中键属性及其值用逗号分隔。
Set oIIS = GetObject("winmgmts:root\WebAdministration")
Set oApp = oIIS.Get("Application.SiteName='Default Web Site',Path='/'")
WScript.Echo "Successfully retrieved: '" & oApp.SiteName & oApp.Path & "'"
单击“文件”、“另存为...”以打开“保存”对话框。 找到对话框底部的“另存为类型:”文本框,并将其值从“文本文档(*.txt)”更改为“所有文件”。 将文件另存为“GetApp.vbs”,保存在桌面上。
单击“开始”,单击“开始搜索”框,键入 cmd.exe,然后按 Enter。
键入 cd %SystemDrive%\Users\Administrator\Desktop,然后按 Enter。
键入 GetApp.vbs,然后按 Enter。 可以看到以下输出:
已成功检索: 'Default Web Site/'
3.创建站点实例
要创建站点实例,请再次查看 CIM Studio 文章中介绍的方法参数。 在 CIM Studio 中搜索 Site 类。 在右窗格中选择“方法”选项卡。
右键单击“Create”方法并选择“编辑方法参数”。 你将看到下面的对话框,其中显示了 Create 方法的参数。 单击“取消” 。
现在我们知道此方法采用哪些参数,我们将通过将以下脚本行粘贴到记事本来创建这些参数的变量。
Set oIIS = GetObject("winmgmts:root\WebAdministration")
' Create a binding for the site
Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = "*:80:www.newsite.com"
oBinding.Protocol = "http"
' These are the parameters we pass to the Create method
name = "NewSite"
physicalPath = "C:\inetpub\wwwroot"
arrBindings = array(oBinding)
单击“文件”、“另存为...”以打开“保存”对话框。 找到对话框底部的“另存为类型:”文本框,并将其值从“文本文档(*.txt)”更改为“所有文件”。 将文件另存为“CreateSite.vbs”,保存在桌面上。
单击“开始”,单击“开始搜索”框,键入 cmd.exe,然后按 Enter。
键入 cd %SystemDrive%\Users\Administrator\Desktop,然后按 Enter。
键入 CreateSite.vbs,然后按 Enter。 脚本应该会成功运行。
返回到 CIM Studio,再次右键单击“创建方法”,这次选择“方法限定符...”。 生成的对话框如下所示,表明“Create”方法是静态方法。 单击“取消” 。
必须从对象定义调用静态方法。 下面的脚本示例显示了检索对象实例和检索对象定义之间的差异:
Set oIIS = GetObject("winmgmts:root\WebAdministration")
' In order to retrieve an object instance, the object's key properties
' and their values must be specified in the WMI object instance path
Set oSite = oIIS.Get("Site.Name='Default Web Site'")
' The object definition can be retrieved by specifying the name
' of the object without any key properties and values
Set oSiteDefn = oIIS.Get("Site")
在 CreateSite.vbs 脚本中添加几行以创建站点:
Set oIIS = GetObject("winmgmts:root\WebAdministration")
' Create a binding for the site
Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = "*:80:www.newsite.com"
oBinding.Protocol = "http"
' These are the parameters we pass to the Create method
name = "NewSite"
physicalPath = "C:\inetpub\wwwroot"
arrBindings = array(oBinding)
' Get the Site object definition
Set oSiteDefn = oIIS.Get("Site")
' Create site!!
oSiteDefn.Create name, arrBindings, physicalPath
WScript.Echo "Site created successfully!"
返回到 cmd 提示符并运行 CreateSite.vbs。 可以看到以下输出:
站点已成功创建!
若要查看站点已创建的证据,请键入 notepad %windir%\system32\inetsrv\ApplicationHost.config
。 键入 Ctrl+F 以显示记事本的“查找”对话框。 在“查找内容:”文本框中键入 NewSite,然后单击“查找下一个”按钮。 这会转到已定义新站点的 <sites>
节:
<site name="NewSite" id="2">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:www.newsite.com" />
</bindings>
</site>
有关创建/删除/修改对象的其他说明
并非 WebAdministration 命名空间中的所有对象都可以创建或删除。 例如,服务器管理 WorkerProcess 和 AppDomain 对象的生命周期,无法 WMI 来创建或删除这两个对象。
要确定对象是否可以创建、删除或修改,可在 CIM Studio 中搜索站点。 右键单击“属性”选项卡上的属性网格,然后单击“对象限定符...”。你将看到以下对话框:
对象限定符 SupportsCreate、SupportsDelete 和 SupportsUpdate 描述是否可以创建、删除或修改对象。 可以创建、删除和修改站点,因此站点包含这三个限定符,它们的值均为 true。
在 CIM Studio 中搜索 WorkerProcess。 右键单击“属性”选项卡上的属性网格,然后单击“对象限定符...”。下面的对话框显示 WorkerProcess 对象没有这三个限定符:默认情况下,这些限定符的值为 false(有关详细信息,请参阅标准限定符)。 因此无法创建、删除或修改 WorkerProcess 对象。
4.枚举所有站点实例
下面的脚本使用“InstancesOf”方法检索站点对象的所有实例。 将以下脚本粘贴到新的记事本窗口中,并另存为“EnumSites.vbs”。
Set oIIS = GetObject("winmgmts:root\WebAdministration")
Set oSites = oIIS.InstancesOf("Site")
For Each oSite In oSites
WScript.Echo oSite.Name & " (" & oSite.Id & ")"
Next
运行 EnumSites.vbs 脚本。 你将看到以下输出,即 Default Web Site,以及我们在任务 3 中创建的站点。
Default Web Site (1)
NewSite (2)
详细信息
你可能会想要知道 InstancesOf 方法来自哪里,在哪里可以了解其详情。 脚本的第一行是之前多次使用的同一行,用于连接到 WebAdministration WMI 命名空间:
Set oIIS = GetObject("winmgmts:root\WebAdministration").
GetObject 调用返回一个 SWbemServices 对象,该对象可用于对命名空间执行操作。 此对象具有 InstancesOf 方法,还有其他很多有用的方法。 若要详细了解 InstancesOf 或其他可用方法,请参阅有关 SWbemServices 的平台 SDK文章。
5.启动和停止网站
在修改网站状态之前,我们要了解网站处于什么状态。 下面的脚本连接到 WebAdministration 命名空间,获取 Site 实例,然后对 Site 实例调用 GetState 方法。 GetState 方法返回一个数值状态,所以此脚本包含一个帮助程序函数,用于将数字状态转换为更具描述性的字符串。 将此脚本粘贴到新的记事本窗口中,并将其保存为 GetSiteStatus.vbs。
Set oIIS = GetObject("winmgmts:root\WebAdministration")
Set oSite = oIIS.Get("Site.Name='NewSite'")
WScript.Echo GetStateDescription(oSite.GetState)
' -------helper functions-----------
Function GetStateDescription(statusCode)
Select Case statusCode
Case 1
GetStateDescription = "Started"
Case 2
GetStateDescription = "Starting"
Case 3
GetStateDescription = "Stopped"
Case 4
GetStateDescription = "Stopping"
Case 5
GetStateDescription = "Unknown"
Case Else
GetStateDescription = "Error: Bad Status"
End Select
End Function
从 cmd 提示符运行 GetSiteStatus.vbs,将看到以下输出:
Started
站点已启动,因此要编写一个脚本使其停止。 我们将从 GetSiteStatus.vbs 复制脚本代码,但我们要添加几行内容来停止站点(所有新的行或更新的行都为粗体)。 将此脚本粘贴到新的记事本窗口中,并将其保存为 StopSite.vbs。
Set oIIS = GetObject("winmgmts:root\WebAdministration")
Set oSite = oIIS.Get("Site.Name='NewSite'")
WScript.Echo oSite.Name & " is " & GetStateDescription(oSite.GetState)
oSite.Stop
WScript.Echo oSite.Name & " is " & GetStateDescription(oSite.GetState)
' -------helper functions-----------
Function GetStateDescription(statusCode)
Select Case statusCode
Case 1
GetStateDescription = "Started"
Case 2
GetStateDescription = "Starting"
Case 3
GetStateDescription = "Stopped"
Case 4
GetStateDescription = "Stopping"
Case 5
GetStateDescription = "Unknown"
Case Else
GetStateDescription = "Error: Bad Status"
运行 StopSite.vbs 脚本,会看到以下结果:
NewSite 已启动
NewSite 已停止
现在我们要再次启动站点。 将 StopSite.vbs 复制到名为 StartSite.vbs 的新脚本。 打开 StartSite.vbs,并将 oSite.Stop 行改为读取 oSite.Start。 运行 StartSite.vbs,应会看到以下输出:
NewSite 已停止
NewSite 已启动
6.删除站点
运行在任务 4 中创建的 EnumSites.vbs 脚本。 应会看到以下输出,这意味着服务器上有两个站点:
Default Web Site (1)
NewSite (2)
下面的脚本连接到 WebAdministration 命名空间,获取 Site 的 NewSite 实例并将其删除。 将此脚本粘贴到新的记事本窗口中,并将其保存为 DeleteSite.vbs。
Set oIIS = GetObject("winmgmts:root\WebAdministration")
Set oSite = oIIS.Get("Site.Name='NewSite'")
oSite.Delete_
从 cmd 提示符运行 DeleteSite.vbs。
再次运行 EnumSites.vbs 以确认已成功删除 NewSite。 你会看到以下输出,表明 Default Web Site 是服务器上的唯一剩余站点:
Default Web Site (1)
总结
你已了解如何执行下列操作:检索 Site 或 Application 对象的特定实例,创建站点,枚举所有站点实例、停止和启动站点,删除站点。 此信息大部分适用于其他命名空间对象;例如,Application 和 ApplicationPool 对象的创建和删除方式与站点相同。