您的位置:首页 > 编程语言 > VB

iisvdir.vbs管理虚拟目录

2011-12-21 16:43 447 查看
虚拟目录的配置简单来说就是创建虚拟目录。用手工的方式实现非常简单,直接设定“Web sharing”就可以了,让我们看看怎么通过编程的方式实现,两种创建虚拟目录的方法:

1、通过调用iisvdir.vbs,

2、通过System.DirectoryServices.DirectoryEntry。

为了方便描述,我写了两个虚拟目录操作类,简单的封装了iisvdir.vbs和System.DirectoryServices.DirectoryEntry管理虚拟目录的方法,结构如下所示:



Server为iis服务器的ip或机器名,User和Password为该服务器的管理员用户名和密码,Alias为虚拟目录的名称,VirtualRoot为虚拟目录所在根目录的名称(如下图),PhysicalPath为该虚拟目录相应的物理路径。如果想进一步了解IIS虚拟目录的属性,可以参考MSDN IIsWebVirtualDir



通过调用iisvdir.vbs创建虚拟目录

看官可以参考一下MSDN的相关资料:

Creating
Web Virtual Directories Using Iisvdir.vbs

Deleting
Web Virtual Directories Using Iisvdir.vbs

Listing
Web Virtual Directories Using Iisvdir.vbs .

仔细看还会发现, IIS管理器也是通过调用iisvdir.vbs来实现虚拟目录的创建和删除的。我们可以通过命令行的方式来执行iisvdir.vbs脚本,

1)创建虚拟目录:


cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /create
[virtualRoot] Alias PhysicalPath

2)删除虚拟目录:

1

cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /delete [virtualRoot]/Alias

3)查看指定虚拟目录下的全部子目录:

1

cscript c:\windows\system32\iisvdir.vbs [/s server] [/u username /p password] /query virtualRoot

通过封装这三个操作,可以实现iis虚拟目录的创建、删除和判断是否存在:

1)创建虚拟目录:

1 /// <summary>

2 /// 创建iis虚拟目录

3 /// </summary>

4 /// <exception cref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>

5 public override void CreateDirectory()

6 {

7 // 已不覆盖的方式创建虚拟目录,当虚拟目录存在时抛出异常

8 this.CreateDirectory(false);

9 }

10

11 /// <summary>

12 /// 创建iis虚拟目录

13 /// </summary>

14 /// <param name="bReplace">是否覆盖掉原有的虚拟目录</param>

15 /// <exception cref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>

16 public override void CreateDirectory(bool bReplace)

17 {

18 // 判断目录是否存在

19 if (this.Exist())

20 {

21 if (bReplace)

22 {

23 // 若允许覆盖则先删除原有的虚拟目录

24 this.DeleteDirectory();

25 }

26 else

27 {

28 // 若不允许覆盖直接抛出目录已存在的异常

29 DirectoryException.Throw("directory already exist");

30 }

31 }

32

33 ReturnMessage message = ScriptDirectory.ExecuteScript(

34 this, ScriptDirectory.CONST_ACTION_CREATE);

35

36 // 输出message信息供nunit查看

37 Console.WriteLine("return code: " + message.Code);

38 Console.WriteLine("return message: \n" + message.Message);

39

40 // 若创建失败抛出虚拟目录操作异常

41 if (message.Code != 0)

42 {

43 DirectoryException.Throw(message.Message);

44 }

45 }

2)删除虚拟目录:

1 /// <summary>

2 /// 删除iis虚拟目录

3 /// </summary>

4 /// <exception cref="CreateIIsDirectory.DirectoryException">虚拟目录操作异常</exception>

5 public override void DeleteDirectory()

6 {

7 ReturnMessage message = ScriptDirectory.ExecuteScript(

8 this, ScriptDirectory.CONST_ACTION_DELETE);

9

10 // 输出message信息供nunit查看

11 Console.WriteLine("return code: " + message.Code);

12 Console.WriteLine("return message: \n" + message.Message);

13

14 // 若删除失败抛出虚拟目录操作异常

15 if (message.Code != 0)

16 {

17 DirectoryException.Throw(message.Message);

18 }

19 }

3) 判断虚拟目录是否存在:

1 /// <summary>

2 /// 判断iis虚拟目录是否存在

3 /// </summary>

4 /// <returns>目录是否存在</returns>

5 public override bool Exist()

6 {

7 ReturnMessage message = ScriptDirectory.ExecuteScript(

8 this, ScriptDirectory.CONST_ACTION_QUERY);

9 bool bExist = false;

10

11 // 输出message信息供nunit查看

12 Console.WriteLine("return code: " + message.Code);

13 Console.WriteLine("return message: \n" + message.Message);

14

15 // 从返回字符串中判断该虚拟目录是否存在

16 if (message.Code == 0)

17 {

18 Regex reg = new Regex("/" + this.m_strAlias + @"\s+");

19 message.Message = message.Message.Substring(

20 message.Message.IndexOf("/"));

21

22 bExist = reg.IsMatch(message.Message);

23 }

24

25 return bExist;

26 }

ScriptDirectory.ExecuteScript函数封装了iisvdir.vbs的调用和参数的组合,代码比较长,大家可以在/Files/chwkai/CreateIIsDirectory.rar下载到本文所讨论的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: