// by redice 2009.5.31
// http://www.redicecn.cn
// redice@163.com
// 说明:我花了一天的时间才搞定这个,绝对是独家开源,转载请保留上述信息
网上关于IIS站点目录权限设置的资料倒是不少,不过全部都是通过调用微软提供的“chaccess.vbs”实现的,仔细分析一下这个脚本的代码可以发现这个脚本只能用来设置站点根目录的权限,而不能设置站点子目录的权限。郁闷,看来不能偷懒了...
我尝试“ GetObject("IIS://127.0.0.1/w3svc/" & siteId & "/root/站点子目录")”,但是程序出错,郁闷,不知道问题出在哪儿?
网上关于通过程序设置IIS站点子目录的资料可以说是零,找了1个多小时,没有找到任何有参考价值的信息。
后来在Google上使用"ADSI subdirectory"关键字,总算在国外的一个论坛上找到了一点线索,原文地址是:
https://secure.experts-exchange.com/index.jsp?srid=O6Ps8GTsRmXWeVZrd6NTeQ%3D%3D&redirectURL=/Software/Server_Software/Web_Servers/Microsoft_IIS/Q_21103439.html&rsid=20
一个叫"alimu"的网友说到;
From what I understand, the directories included in the metabase hierarchy under oot are only the ones that do not inherit settings from their parent directories. i.e. Virtual directories, directories with different permission configurations, directories setup as applications, etc.
i.e. Live is a virtual directory so it will be in the metabase. liveuserfiles, however, wont show in the metabase unless youve altered its configuration from the default.
eg scenario: a site stores all files in inetpubwwwroot.
your web root = inetpubwwwroot directory.
There are no virtual directories, alternating permissions or application settings below the root level in IIS.
In this scenario, there will be no nodes in the metabase below ROOT
hope this makes sense - best if you download metaedit and take a look at your web to make this clearer.
AJ.(注:这段话可是我花了1美元才看到的啊...好心疼啊!)
我英文不太好,勉强能读懂他的意思“没有特殊权限设置的站点子目录在metabase(iis的配置文件)中是没有相关记录的,也就不能直接通过ADSI来设置他的属性”,别小看了这句话,问题就是这样解决的。 这就是上面通过“ GetObject("IIS://127.0.0.1/w3svc/" & siteId & "/root/站点子目录")”获取站点子目录失败的原因了。
看来要获取到该子目录必须先要让它在metabase中有所记录,怎么实现呢?将该目录创建为一个IISWebDirectory就行了...
经过一番尝试,问题终于搞定了。呵呵。
代码如下所示(注释的单引号可能会被过滤),关键地方我都加注释了。
'设置主机目录权限
'参数说明:
'siteId - 站点id
'strPath - 子目录相对根目录的路径,使用","将各个目录分开
'例如:站点根目录是d:wwwroot,要设置的目录为d:wwwroot aoyardbs,那么这里strPath应为"taoyard,bbs"
'如果strPath为空则表示主目录
'strName - 要设置的属性
'bValue - 设置的属性值
Public Function ChSiteDirAccess(siteId As String, strPath As String, strName, bValue) As Boolean
ChSiteDirAccess = True
Dim oAdmin As Object
Set oAdmin = GetObject("IIS://127.0.0.1/w3svc/" & siteId & "/root")
If strPath <> "" Then '对站点子目录的设置
Dim dirCells() As String
dirCells = Split(strPath, ",")
Dim i As Integer
Dim oWebDir As Object
Set oWebDir = oAdmin
For i = 0 To UBound(dirCells)
If dirCells(i) <> "" Then
Set oWebDir = oWebDir.GetObject("IISWebDirectory", dirCells(i))
'获取IISWebDirectory失败,则可能是因为metabase中没有记录
If err.Number <> 0 Then
'在metabase中创建相关记录
On Error GoTo err
Set oWebDir = oWebDir.Create("IISWebDirectory", dirCells(i))
End If
On Error GoTo err
If i = UBound(dirCells) Then
oWebDir.put strName, bValue
oWebDir.SetInfo
End If
End If
Next
Set oWebDir = Nothing
Else '对站点根目录的设置
oAdmin.put strName, bValue
oAdmin.SetInfo
End If
Set oAdmin = Nothing
Exit Function
err:
ChSiteDirAccess = False
End Function
最后给出一个例子:
假设站点id为: 1
站点根目录为: d:wwwroot
要设置的目录为: d:wwwrootbsupfile
要设置的权限为关闭脚本运行权限。
函数调用为: ChSiteDirAccess "1", "bbs,upfile", "AccessScript", False
基于ADSI对IIS站点根目录及子目录的权限设置
[日志分享]
[日志信息]
该日志于 2009-05-31 16:21 由 redice 发表在 redice's Blog ,你除了可以发表评论外,还可以转载 “基于ADSI对IIS站点根目录及子目录的权限设置” 日志到你的网站或博客,但是请保留源地址及作者信息,谢谢!! (尊重他人劳动,你我共同努力)
呵呵,谢谢
VaTG790i.最好的<a href=http://www.kyfei.com>网站推广软件</a>,
非常好
....................
;ui;普i;uighur;ui;ui;个
在unix网络编程中看到了关于TCP/IP的一些内容,我感觉还是写的不够。正在下载中,一定
下载地址呢