关于 IIS ADSI 对象

IIS ADSI 对象是 COM 自动化对象,可以在命令行脚本、ASP 页或自定义应用程序内使用这些对象,以更改存储在 IIS 配置数据库中的 IIS 配置值。例如,不使用 IIS 管理器,您可以通过编写脚本来为配置数据库中的 AppRootLogTypeConnectionTimeout 属性设置的权限。

本主题包括下列信息:

ADSI 与配置数据库之间的关系

每个 IIS ADSI 对象都对应于配置数据库架构中的项。例如,IIsWebServer (ADSI) ADSI 对象对应于配置数据库架构文件中的 IIsWebServer 集合项,如 MBSchema.xml 中下面的代码行所示:

<Collection InternalName="IIsWebServer"
        MetaFlagsEx="NOTABLESCHEMAHEAPENTRY | CONTAINERCLASS"
        MetaFlags="HASUNKNOWNSIZES"
        ContainerClassList="IIsObject,IIsCertMapper,IIsFilters,IIsWebVirtualDir"
        InheritsPropertiesFrom="MetabaseBaseClass">

IIS ADSI 对象和配置数据库架构文件中的项只描述了 IIS 配置的结构,如同建筑物的示意图描述建筑物的结构那样。IIS 使用配置数据库架构作为构建配置数据库配置文件、添加网站和虚拟目录,以及随着 Web 服务器的增长进行其他配置更改的指南。

配置数据库配置文件包含配置数据库架构文件中的项的“实例”。例如,在 IIS 6.0 的默认安装上,配置数据库配置文件包含默认网站的 IIsWebServer 项的一个实例,如 MetaBase.xml 中下面的代码行所示:

<IIsWebServer  Location ="/LM/W3SVC/1"
        AppPool
        DefaultDoc="Default.htm,Default.asp,index.htm,iisstart.asp,Default.aspx"
        SecureBindings=":443:"
        ServerBindings=":80:"
        ServerComment="Default Web Site"
        ServerSize="1">

当您使用 IIS ADSI 对象访问当前位于配置数据库配置文件中的数据时,您要创建一个该 IIS ADSI 对象的实例并用当前数据填充对象属性。例如,在使用 IIsWebServer ADSI 对象连接到 Web 服务器上的默认网站,您要创建 IIsWebServer 对象的实例,如 ServerComment 之类的属性包含上面的信息。下面的 Microsoft Visual Basic® Scripting Edition (VBScript) 代码创建了 IIsWebServer ADSI 对象的实例,该对象对象连接到名为 MachineName 的计算机上的默认网站:

Set IIsWebServerObj = GetObject("IIS://MachineName/W3SVC/1")

由于修改 IIS ADSI Object 属性会更改相应的配置数据库属性的值,您可以配置 IIS 的单个元素,如使用 IIsComputer 对象配置本地计算机 (LM);使用 IIsFtp* 对象配置 FTP 服务器 (MSFTPSVC);使用 IIsWeb* 对象配置 Web 服务器 (W3SVC);使用 IIsNntp* 对象配置网络新闻服务器 (NNTPSVC);以及使用 IIsSmtp* 对象配置简单邮件服务器 (SMTPSVC)。

属性

每个 IIS ADSI 对象都包含两个“属性”组:一组所有 ADSI 对象都必须包含的只读属性,以及一组对应于配置数据库架构中属性的 IIS 专有属性。

例如,IIsWebServer 对象的 NameAdsPath 属性是所有 ADSI 对象必须包含的六个只读 Windows ADSI 对象属性中的两个。LogTypeConnectionTimeout 属性是可以在 IIsWebServer 级别设置的 51 个可能的属性中的两个。这些属性可以在配置数据库架构文件的 <Collection> 项下看到:

<Property InheritsPropertiesFrom="IIsConfigObject:LogType"/>
<Property InheritsPropertiesFrom="IIsConfigObject:ConnectionTimeout"/>

这些属性可能不会在配置数据库配置文件中出现,除非在该级别专门对其进行了设置。如果它们没有出现,它们可能是从父项中继承的。

方法

一些 IIS ADSI 对象包含三组方法:一组用于创建和删除新对象,一组用于更改 ADSI 对象的属性,还有一组专门涉及在其中查找方法的 ADSI 对象的目的。

例如,Create 方法是所有 ADSI 对象包含的五个 Windows ADSI 容器对象方法之一。通过它们,您可以创建和删除 ADSI 对象的新实例,获取对子对象的引用,以及来回移动对象实例。下面的 VBScript 代码创建了包含在另一个 IIsWebVirtualDir 对象内的 IIsWebVirtualDir 对象的新实例,从而在默认网站中创建了一个名为 NewVDir 的新的虚拟目录:

Set IIsWebVDirRootObj = GetObject("IIS://MachineName/W3SVC/1/Root")
Set IIsWebVDirObj = IIsWebVDirRootObj.Create("IIsWebVirtualDir", "NewVDir")

GetPutSetInfo 方法是所有 ADSI 对象包含的八个 Windows ADSI 对象方法中的三个。通过它们,可以获取属性中的值,将其设置为其他值,然后将该信息保存到配置数据库。下面的 VBScript 代码从上一个代码继续,以在新创建的虚拟目录上设置某些必需的属性:

IIsWebVDirObj.Put "Path", "C:\NewContent" 
IIsWebVDirObj.Put "AccessRead", True
IIsWebVDirObj.Put "AccessScript", True

IIsWebVirtualDir (ADSI) 对象的 IIsWebDirectory.AppCreate2 (ADSI) 方法只与在虚拟目录和 Web 目录上创建应用程序相关。下面的 VBScript 代码从上一个代码示例继续,在新的虚拟目录上创建应用程序,设置应用程序需要的属性,并用 SetInfo Windows ADSI 对象方法将新设置保存在配置数据库中:

IIsWebVDirObj.AppCreate2 1
IIsWebVDirObj.Put "AppFriendlyName", "NewApp"
IIsWebVDirObj.SetInfo

其他方法的示例(专门涉及包含这些方法的对象)是 IIsComputer (ADSI)ADSI 对象的方法。诸如 IIsComputer.Backup (ADSI)IIsComputer.Restore (ADSI) 之类的方法用于防止配置数据库的潜在地有害更改。建议在进行任何更改之前一定要备份配置数据库配置文件。下面的 VBScript 代码将配置数据库配置文件备份到名为 BeforeChanges.MD0 的文件,并且将配置数据库架构文件备份到名为 BeforeChanges.SC0 的文件。这些文件存储在 systemroot\System32\Inetsrv\MetaBack 目录中。

Dim IIsComputerObj, iFlags 
'创建 IIsComputer 对象的实例。
Set IIsComputerObj = GetObject("IIS://janetfi-32")
'设置标记以保存该配置数据库,然后强制作出一个备份(即使保存出现故障)。
iFlags = (MD_BACKUP_SAVE_FIRST or MD_BACKUP_FORCE_BACKUP) 
'备份到下一个可用版本号。
IIsComputerObj.BackupWithPassword "BeforeChanges", MD_BACKUP_NEXT_VERSION, iFlags, "[email protected]"

继承

由于配置数据库的层次结构以及其属性继承功能,您可以轻松地为单个文件、单个服务器、所有 Web 服务器、所有 FTP 服务器配置属性,或配置许多其他对象组的通用属性。

安全性

只有服务器管理员才允许通过 ADSI 更改配置数据库中的值。如果您在命令行脚本中使用 ADSI,则请注意,它们只有在由管理员运行的情况下才起作用。如果您在已编译的程序中使用 ADSI,则请将应用程序的帐户设置为管理员帐户。为提高安全性,建议您将脚本和已编译的管理程序上的访问控制设置为将访问权限限制为 Administrators 组。

如果您在 ASP 页中使用 ADSI 对配置数据库进行配置,则必须禁止对包含 ASP 页的 Web 应用程序进行匿名访问。建议您为管理性的 ASP 文件创建服务器或目录并设置身份验证方法,以便为该服务器或目录使用集成 Windows 身份验证。出于安全考虑,进程外 Web 应用程序无法访问配置数据库,除非 WAMUserName 被识别为是管理员。然而,这并不是建议的配置。作为一个替代方法,请将特定的进程外数据包的标识更改为某个其他的帐户标识,并且只为该帐户提供对配置数据库的管理访问权限。此方法引入的潜在风险较少,但必须为每一个进程外数据包执行该方法。

要点 要点 建议不要使 IWAM_machinename 成为管理员,除非有特殊情况需要您这么做。使 IWAM_machinename 成为管理员意味着,通过进程外 Web 应用程序访问您的服务器的任何人都将具有您的计算机的管理特权。

扩展 IIS ADSI 架构

如果您发现没有现成的 ADSI 对象类满足您的管理需求,则您可以扩展 IIS ADSI 架构。扩展 IIS ADSI 架构是一个复杂的操作。认真考虑您的需要,并评估是否确实需要扩展。

相关主题

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