Web控制Windows资源
如何使用浏览器透过网际网路或intranet内部网路,来存取管理Windows 2000的资源呢?
答案为使用Active Directory Service(动态目录服务,简称ADS)。
Active Directory Service,将使用者帐号、群组、服务、档案、网路上的印表机、IIS、Exchange Server等,都视为目录下的一个个体,我们可以查询,或是控制目录下的个体。
要管理Active Directory Service,微软公司所提供的程式介面(Object及函式),就是ADSI(Active Directory Service Interface)。
Windows 2000提供Active Directory Service的功能,Windows NT 4.0只要安装一个ADSI Provider(adsi.exe档案),就可以使用Active Directory Service的功能,您可以到 http://www.microsoft.com/ntserver/guide/adsi.asp 下载。
使用浏览器,透过网际网路或intranet,经由於IIS网站伺服器执行的ASP(Active Server Pages)程式,来呼叫ADSI,即可做到:
- 管理 使用者帐号: 譬如查询某群组的 使用者 、新建、修改、删除 使用者帐号 。
- 管理 群组: 譬如查询 群组 、新建、删除 群组 。
- 管理控制台的 服务 。
- 设定 档案共用 。查询网路使用共用档案的记录。
- 管理网路列印工作。
- 管理IIS。
- 管理Exchange Server。
若要使用浏览器,透过呼叫ADSI的方式来修改Windows 2000的资源,您不能使用 允许匿名存取 的方式。方法为执行 Internet服务管理员 ,於所执行ASP虚拟目录按右键并选择 内容 ,於 目录安全设定 之 匿名存取及验证控制 中按下 编辑 按钮,且不勾选 允许匿名存取 。
本章范例,须於 Internet服务管理员 在虚拟目录IIS5Samp下之adsi目录按右键并选择 内容 ,於 目录安全设定 之 匿名存取及验证控制 中按下 编辑 按钮,只勾选 基本验证 ,如下:
并修改adsi.asp程式中有关DOMAIN与Machine为您电脑实际的网域与电脑之名称才能正常动作,如下:
<% DOMAIN = "WWW" Machine = "ASP" User = "Administrator" %>
4-1 ADSI如何管理使用者与群组呢?
查询某群组的使用者
若要列出一般使用者(users)群组的所有使用者,ASP程式码adsi.asp如下:
<% Set Obj1 = GetObject("WinNT://电脑名称/users") Response.Write "列出 " & Obj1.Name & " 於: <B>" & Obj1.Parent & "<BR>" For Each Member in Obj1.Members Response.write Member.Name & " 为 " & Member.class & "<br>" Next %>
Member.Name列出使用者,Member.class会得知其为群组(Group)或使用者(User)。
新建使用者帐号
执行 系统管理工具 的 网域使用者管理员 可以新建Windows 2000的使用者帐号,如下:
如何使用浏览器透过网际网路或intranet内部网路,来新建Windows 2000的使用者帐号呢 ? 譬如说,我们要新建一个使用者名称叫做jack的Windows 2000使用者帐号,ASP程式码adsi.asp只要七行:
<% Set ComputerObj = GetObject("WinNT://电脑名称") Set NewUser = ComputerObj.Create("User", "jack") NewUser.SetInfo NewUser.SetPassword("密码") NewUser.FullName = "全名" NewUser.Description = "说明" NewUser.SetInfo %>
首先使用Create("User", "使用者名称″)的方法新建一个使用者帐号,呼叫SetInfo方法即可储存变更。接着,使用SetPassword的方法设定「密码」,於FullName属性设定全名,於Description属性设定「说明」,最後再呼叫SetInfo方法储存变更,即可以新建一个使用者帐号。
修改使用者帐号
您可以使用浏览器,使用ASP程式码透过呼叫ADSI的方式来修改使用者帐号。
譬如说,若要修改使用者帐号的「说明」,您可使用get("Description")方法将「说明」设定值读出,於Description属性设定「说明」变更後再储存回去,ASP程式码adsi.asp如下:
<% Set Obj1 = GetObject("WinNT://网域/电脑名称/使用者名称") UserDes = Obj1.get("Description") Obj1.Description = UserDes & " 123" Obj1.SetInfo Obj1.GetInfo UserDes = Obj1.get("Description") Response.write "New Description: " & UserDes %>
上例将「说明」加上「 123」变更後再储存回去。
您也可以修改使用者帐号的密码。
方法为使用ChangePassword "旧密码", "新密码",ASP程式码adsi.asp如下:
<% Set UserObj = GetObject("WinNT://电脑名称/使用者名称") UserObj.ChangePassword "旧密码", "新密码" %>
您也可以变更使用者帐号的相关设定,每个设定使用一个位元代表:
- 使用者下次登入时须变更密码: &H20000
- 使用者不得变更密码: &H0040
- 密码永久正确: &H10000
- 帐户暂时停用: &H0002
您可使用Get("UserFlags")方法将设定值读出,变更相对应的一个位元设定後再储存回去。
譬如说,我们变更使用者名称jack为 密码永久正确 ,ASP程式码adsi.asp如下:
<% Set UserObj = GetObject("WinNT://电脑名称/jack") Flags = UserObj.Get("UserFlags") UserObj.Put "UserFlags", Flags Or &H10000 UserObj.SetInfo %>
变更使用者名称jack为不是 使用者下次登入时须变更密码 ,ASP程式码如下:
<% Set UserObj = GetObject("WinNT://电脑名称/jack") Flags = UserObj.Get("UserFlags") UserObj.Put "UserFlags", Flags And &HFDFFFF UserObj.SetInfo %>
删除使用者帐号
您可以使用浏览器,使用ASP程式码透过呼叫ADSI的方式来删除使用者帐号。
方法为使用「Delete "user", 使用者名称」方法来删除使用者帐号。譬如说,若要删除使用者帐号jack,ASP程式码adsi.asp如下:
<% On Error Resume Next Set UserObj = GetObject("WinNT://电脑名称/jack") If Err = &H800401E4 Then Response.Write "User Not Found" Response.End End If Set ParentObj = GetObject(UserObj.Parent) ParentObj.Delete "user", UserObj.Name Set UserObj = Nothing Response.Write "Done" %>
查询群组
若要列出所有的群组,ASP程式码adsi.asp如下:
<% Set ComputerObj = GetObject("WinNT://电脑名称") ComputerObj.Filter = Array("Group") For Each Member in ComputerObj Response.Write Member.Name & ": " & Member.Class & "<br>" Next %>
其中设定Filter = Array("Group")以便存取群组的资讯。
Member.Name列出群组, Member.class会得知其为群组(Group)或使用者(User)。
新建群组
执行 系统管理工具 的 网域使用者管理员 可以新建Windows 2000的群组,如下:
如何使用浏览器透过网际网路或intranet内部网路,来新建Windows 2000的群组呢 ?
ASP程式码如下:
<% Set ComputerObj = GetObject("WinNT:// 网域") Set GroupObj = ComputerObj.Create("group", "新群组名称") GroupObj.SetInfo GroupObj.GroupDescription = Descript GroupObj.SetInfo %>
首先使用Create("group", "新群组名称")的方法新建一个群组,呼叫SetInfo方法即储存变更。接着於GroupDescription属性设定「说明」,最後再呼叫SetInfo方法储存变更,即可新建一个群组。
删除群组
您可以使用浏览器,使用ASP程式码透过呼叫ADSI的方式来删除群组。方法为使用「Delete "group", 群组名称」方法来删除群组。ASP程式码如下:
<% Set ComputerObj = GetObject("WinNT:// 电脑名称") GroupPath = ComputerObj.ADsPath & "/群组名称" Set GroupObj = GetObject(GroupPath) Set ParentObj = GetObject(GroupObj.Parent) ParentObj.Delete "group", GroupObj.Name %>
4-2 ADSI如何管理服务呢?
管理服务
电脑管理 的 服务 可以用来管理各种Windows 2000的 服务 ,如下:
如何使用浏览器透过网际网路或intranet内部网路,来管理各种Windows 2000的 服务 呢?
首先列出所有的服务,ASP程式码如下:
<% Set ComputerObj = GetObject("WinNT://电脑名称") ComputerObj.Filter = Array("Service") For Each Member in ComputerObj Response.Write Member.Name & "<br>" Next %>
其中设定Filter = Array("Service")以便存取服务的资讯。Member.Name列出服务名称。
您可以使用浏览器,使用ASP程式码透过呼叫ADSI的方式来启动、停止、暂停、继续一个服务。使用的方法如下:
- 启动: ServiceObj.Start
- 停止: ServiceObj.Stop
- 暂停: ServiceObj.Pause
- 继续: ServiceObj.Pause
譬如说,若要停止Alerter服务,ASP程式码adsi.asp如下:
<% Set ServiceObj = GetObject("WinNT://网域/电脑名称/Alerter") ServiceObj.Stop %>
您可以使用浏览器,使用ASP程式码透过呼叫ADSI的方式来设定一个服务的 启动设定 。设定的StartType属性如下:
- 自动: ServiceObj.StartType = 2
- 手动: ServiceObj.StartType = 3
- 停用: ServiceObj.StartType = 4
譬如说,若要变更Alerter服务的启动设定为手动,ASP程式码adsi.asp如下:
<% Set ServiceObj = GetObject("WinNT://网域/电脑名称/ Alerter") ServiceObj.StartType = 3 %>
4-3 ADSI如何管理IIS网站呢?
管理IIS网站
您可以透过浏览器使用ASP来控制管理一个网站。譬如:启动、暂停、继续、或停止一个Web站台、FTP站台、伺服器,或建立一个新的站台、建立一个新的虚拟目录、寻找站台,以及改变站台或虚拟目录的属性设定,譬如设定存取权限、设定最大频宽限制等。
首先先定义待读取或设定的电脑、Web站台、虚拟目录、目录或档案等路径,语法如下,其中IisObj为定义的路径物件名称:
Set IIsObj = GetObject("IIS://电脑名称/服务/站台编号/目录")
其中路径「IIS://电脑名称/服务/站台编号/目录」,语法如下:
- 电脑名称: 为IIS伺服器的电脑名称,若为本机可以LocalHost代表。
- 服务: Web站台为「W3SVC」,FTP站台为「MSFTPSVC」,SMTP Service为「SMTPSVC」,NNTP为「NNTPSVC 」。
- 站台编号: 1代表第一个站台。
- 目录: 虚拟目录,Root表示根目录。
譬如:
- IIS://LocalHost:表示为整个IIS伺服器。
- IIS://LocalHost/W3SVC/1:表示「预设的Web站台」。
- IIS://LocalHost/W3SVC/1/Root:表示「预设的Web站台」的主目录。
- IIS://LocalHost/MSFTPSVC/1:表示为「预设的FTP站台」。
- IIS://LocalHost/SMTPSVC/1:表示为「Default SMTP Site」。
- IIS://LocalHost/NNTPSVC/1:表示为「Default NNTP Site」。
定义位址後即可以使用「GET」指令读取属性(properties)值,语法如下,其中IIsObj为上面所定义的位址物件名称:
xxx = IIsObj.Get("属性名称")
譬如「a = IIsObj.Get("AccessRead")」,表示读取AccessRead属性的设定值,储存到a的变数当中。
若要设定IIS,可以使用「PUT」指令设定属性(properties)值,最後再使用SetInfo方法储存到Metabase当中。语法如下,其中IIsObj为上面所定义的位址物件名称:
IIsObj.Put "属性名称", 设定值 IIsObj.SetInfo
譬如「IIsObj.Put "AccessRead", False」,表示设定AccessRead属性的设定值为False。
存取权限设定范例
如何透过浏览器使用ASP来设定一个虚拟目录、主目录或档案等的存取权限呢 ?
方法为使用「GET」和「PUT」指令以读取和设定属性(properties)值,或者可以使用「.」以读取和设定属性(properties)值。相关的属性,如下:
- AccessRead: 读取。
- AccessWrite: 写入。
- AccessScript: 指令档。
- AccessExecute: 执行。
设定值为True(-1)或False(0)。
控制Web和FTP站台
如何透过浏览器使用ASP来启动、暂停、继续、或停止一个Web站台、FTP站台、或伺服器呢?
为达到这个功能,您必须使用IIS Admin Objects所提供的方法(methods),如下:
- Continue: 继续一个Web站台、FTP站台、或伺服器。
- Pause : 暂停一个Web站台、FTP站台、或伺服器。
- Start: 启动一个Web站台、FTP站台、或伺服器。
- Stop : 停止一个Web站台、FTP站台、或伺服器。
首先先定义待设定的Web站台、FTP站台、或伺服器等路径,语法如下,其中IisObj为定义的路径物件名称:
Set IIsObj = GetObject("IIS://电脑名称/服务/站台编号")
譬如:
- IIS://LocalHost:表示为整个IIS伺服器。
- IIS://LocalHost/W3SVC/1:表示「预设的Web站台」。
- IIS://LocalHost/MSFTPSVC/1:表示为「预设的FTP站台」。
譬如启动一个Web站台,ASP程式码adsi.asp如下:
<% ServerNo = "1" ComputerName = "LocalHost" On Error Resume Next '「 IIS://LocalHost/W3SVC/1」,表示为预设的Web站台。 fullPath = "IIS://" & ComputerName & "/W3SVC/" & ServerNo '开启此路径。 Set objServer = GetObject(fullPath) If Err.Number <> 0 Then Response.Write Now & ". 错误码: " & Hex(Err)& " - " & "无法开启 " & fullPath & ".<br>" End If '使用Start启动(开始)站台 objServer.Start If Err.Number <> 0 Then Response.Write Now & ". 错误码: " & Hex(Err)& " - " & "无法启动(开始)Web站台 " & fullPath & ".<br>" else Response.Write "已经启动(开始)Web站台 " & fullPath & ".<br>" End If %>
建立虚拟目录
如何透过浏览器使用ASP,来建立虚拟目录呢 ?
方法为使用「Create("IISWebVirtualDir","虚拟目录名称")」方法,以建立虚拟目录,并设定以下属性:
- Path: 设定虚拟目录的实际物理路径。
- EnableDirBrowsing: 设定虚拟目录是否允许浏览目录。
- AccessRead: 设定虚拟目录是否允许读取。