第 3 课:创建站点和虚拟目录以及设置属性

由于 Windows Management Instrumentation (WMI) 中的一切都是通过对象关系来进行连接的,因此需要与服务建立连接才能创建站点,并且需要与站点建立连接才能创建虚拟目录。创建子对象的方法位于父对象中也是有意义的。请注意在下面的示例中,使用了 WMI 方法 SpawnInstance_ 来创建 ServerBinding 对象的新实例,而不是使用父对象中的方法。这是因为 IIsStructuredDataClass 的元素,如 ServerBinding,都是独立的。

在查看下面的代码之前,请在 WMI SDK 中了解 SWbemObject 对象的 SpawnInstance_ 方法。还请查看 IIsWebService (WMI) 对象的 IIsWebService.CreateNewSite(WMI) 方法。请记住,将字符串 MyMachine 更改为运行 IIS 6.0 的计算机的名称。此外,还要将路径 C:\Inetpub\Wwwroot 更改为有效的路径。

VBScript
' 建立与 WMI、MyMachine 上的 IIS 名称空间以及 Web 服务的连接。
set locatorObj = CreateObject("WbemScripting.SWbemLocator")
set providerObj = locatorObj.ConnectServer("MyMachine", "root/MicrosoftIISv2")
set serviceObj = providerObj.Get("IIsWebService='W3SVC'")
' 建立绑定对象,这是 CreateNewSite 方法必需的参数。
' 由于我们正在创建某个对象的新实例,请使用 SpawnInstance WMI 方法。
Bindings = Array(0)
Set Bindings(0) = providerObj.get("ServerBinding").SpawnInstance_()
Bindings(0).IP = ""
Bindings(0).Port = "8383"
Bindings(0).Hostname = ""
' 使用 IIsWebService 对象的 CreateNewSite 方法创建新网站。
Dim strSiteObjPath
strSiteObjPath = serviceObj.CreateNewSite("MyNewSite", Bindings, "C:\Inetpub\Wwwroot")
If Err Then
WScript.Echo "*** Error Creating Site:" & Hex(Err.Number) & ":" & Err.Description & " ***"
WScript.Quit(1)
End If
' strSiteObjPath 是以 IIsWebServer='W3SVC/1180970907' 格式表示的
' 要解析出绝对路径 W3SVC/1180970907,请使用 SWbemObjectPath WMI 对象。
Set objPath = CreateObject("WbemScripting.SWbemObjectPath")
objPath.Path = strSiteObjPath
strSitePath = objPath.Keys.Item("")
' 在由 CreateNewSite 创建的根虚拟目录上设置某些属性。
Set vdirObj = providerObj.Get("IIsWebVirtualDirSetting='" & strSitePath & "/ROOT'")
vdirObj.AuthFlags = 5 ' AuthNTLM + AuthAnonymous
vdirObj.EnableDefaultDoc = True
vdirObj.DirBrowseFlags = &H4000003E ' date, time, size, extension, longdate
vdirObj.AccessFlags = 513 ' read, script
vdirObj.AppFriendlyName = "Root Application"
' 将新设置保存到配置数据库
vdirObj.Put_()
' CreateNewSite 并没有启动服务器,因此现在要启动它。
Set serverObj = providerObj.Get(strSiteObjPath)
serverObj.Start
WScript.Echo "A New site called MyNewSite was created with the path and unique site identification number of " & strSitePath
JScript
// 建立与 WMI、MyMachine 上的 IIS 名称空间以及 WWW 服务的连接。
var locatorObj = new ActiveXObject("WbemScripting.SWbemLocator");
var providerObj = locatorObj.ConnectServer("MyMachine", "root/MicrosoftIISv2");
var serviceObj = providerObj.Get("IIsWebService='W3SVC'");
// 建立绑定对象,这是 CreateNewSite 方法必需的参数。
// 由于我们正在创建某个对象的新实例,请使用 SpawnInstance WMI 方法。
var Bindings = new Array();
Bindings[0] = providerObj.get("ServerBinding").SpawnInstance_();
Bindings[0].IP = "";
Bindings[0].Port = "8383";
Bindings[0].Hostname = "";
// 使用 IIsWebService 对象的 CreateNewSite 方法创建新网站。
try {
var strSiteObjPath;
strSiteObjPath = serviceObj.CreateNewSite("MyNewSite", Bindings, "C:\\Inetpub\\Wwwroot");
}
catch(e) {
WScript.Echo("*** Error Creating Site:" + e + " " + e.Number + ", " + e.Description + " ***");
WScript.Quit(1);
}
// strSiteObjPath 是以 IIsWebServer='W3SVC/1180970907' 格式表示的
// 要解析出绝对路径 W3SVC/1180970907,请使用 SWbemObjectPath WMI 对象。
var objPath = new ActiveXObject("WbemScripting.SWbemObjectPath");
objPath.Path = strSiteObjPath;
strSitePath = objPath.Keys.Item("");
// 在由 CreateNewSite 创建的根虚拟目录上设置某些属性。
var vdirObj = providerObj.Get("IIsWebVirtualDirSetting='" + strSitePath + "/ROOT'");
vdirObj.AuthFlags = 5; // AuthNTLM + AuthAnonymous
vdirObj.EnableDefaultDoc = true;
vdirObj.DirBrowseFlags = 0x4000003E; // date, time, size, extension, longdate
vdirObj.AccessFlags = 513; // read, script
vdirObj.AppFriendlyName = "Root Application";
// 将新设置保存到配置数据库
vdirObj.Put_();
// CreateNewSite 并没有启动服务器,因此现在要启动它。
var serverObj = providerObj.Get(strSiteObjPath);
serverObj.Start;
WScript.Echo("A New site called MyNewSite was created with the path and unique site identification number of " + strSitePath);

如果运行此脚本两次,在命令提示符窗口将出现下面的错误:

SWbemObjectEx: 由于网络上有重名,没有连接。请到控制面板中的“系统”更改计算机名,然后重试。

命令提示符窗口中的错误是由于两个站点在服务器绑定中使用同一端口号引起的,这意味着两个站点都无法在同一时间运行。然而,两个网站都已成功地创建,并且每个站点都是用唯一的站点标识号码创建的。

VBScript 示例中下面的行似乎比较复杂:

Set Bindings(0) = providerObj.get("ServerBinding").SpawnInstance_()

然而,它只是组合了下面的两行:

Set ServerBinding = providerObj.get("ServerBinding")
Set Bindings(0) = ServerBinding.SpawnInstance_()

下面的代码示例创建了一个虚拟目录并设置了一些必要的属性。

VBScript
const APP_POOLED = 2
var strNewVdir
strNewVdir = "W3SVC/1/Root/newVdir"
' 建立与 WMI、MyMachine 上的 IIS 名称空间的连接。
set locatorObj = CreateObject("WbemScripting.SWbemLocator")
set providerObj = locatorObj.ConnectServer("MyMachine", "root/MicrosoftIISv2")
' 向站点添加一个虚拟目录。此时需要 SpawnInstance()。
Set vdirClassObj = providerObj.Get("IIsWebVirtualDirSetting")
Set vdirObj = vdirClassObj.SpawnInstance_()
vdirObj.Name = strNewVdir
vdirObj.Path = "C:\Inetpub\Wwwroot"
vdirObj.AuthFlags = 5 ' AuthNTLM + AuthAnonymous
vdirObj.EnableDefaultDoc = True
vdirObj.DirBrowseFlags = &H4000003E ' date, time, size, extension, longdate
vdirObj.AccessFlags = 513 ' read, script
' 将新设置保存到配置数据库
vdirObj.Put_()
' 在新虚拟目录上创建一个池中的应用程序。
Set vdirObj = providerObj.Get("IIsWebVirtualDir='" & strNewVdir & "'")
vdirObj.AppCreate2(2)
' 设置应用程序名。
Set vdirObj = providerObj.Get("IIsWebVirtualDirSetting='" & strNewVdir & "'")
vdirObj.AppFriendlyName = "Root Application"
vdirObj.Put_()
JScript
var APP_POOLED = 2;
var strNewVdir = "W3SVC/1/Root/newVdir";
// 建立与 WMI、MyMachine 上的 IIS 名称空间的连接。
var locatorObj = new ActiveXObject("WbemScripting.SWbemLocator");
var providerObj = locatorObj.ConnectServer("MyMachine", "root/MicrosoftIISv2");
// 向站点添加一个虚拟目录。此时需要 SpawnInstance()。
var vdirClassObj = providerObj.Get("IIsWebVirtualDirSetting");
var vdirObj = vdirClassObj.SpawnInstance_();
vdirObj.Name = strNewVdir;
vdirObj.Path = "C:\\Inetpub\\Wwwroot"
vdirObj.AuthFlags = 5; // AuthNTLM + AuthAnonymous
vdirObj.EnableDefaultDoc = true;
vdirObj.DirBrowseFlags = 0x4000003E; // date, time, size, extension, longdate
vdirObj.AccessFlags = 513; // read, script
// 将新设置保存到配置数据库。
vdirObj.Put_();
// 在新虚拟目录上创建一个池中的应用程序。
var vdirObj = providerObj.Get("IIsWebVirtualDir='" + strNewVdir + "'");
vdirObj.AppCreate2(2);
// 设置应用程序名。
var vdirObj = providerObj.Get("IIsWebVirtualDirSetting='" + strNewVdir + "'");
vdirObj.AppFriendlyName = "Root Application";
vdirObj.Put_();

在这些示例中,可以通过用下表中列出的相应的对象名称替换对 IIsWebServiceIIsWebServerIIsWebVirtualDir 的引用,在 FTP 服务、SMTP 服务或 NNTP 服务中创建站点。

Web 对象FTP 对象SMTP 对象NNTP 对象
IIsWebService IIsFtpService IIsSmtpService IIsNntpService
IIsWebServiceSetting IIsFtpServicSetting IIsSmtpServiceSetting IIsNntpServiceSetting
IIsWebServer IIsFtpServer IIsSmtpServer IIsNntpServer
IIsWebServerSetting IIsFtpServerSetting IIsSmtpServerSetting IIsNntpServerSetting
IIsWebVirtualDir IIsFtpVirtualDir IIsSmtpVirtualDir IIsNntpVirtualDir
IIsWebVirtualDirSetting IIsFtpVirtualDirSetting IIsSmtpVirtualDirSetting IIsNntpVirtualDirSetting
相关主题

© 1997-2003 Microsoft Corporation。保留所有权利