ASP与ADSI

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: 设定虚拟目录是否允许读取。

此条目发表在article分类目录。将固定链接加入收藏夹。