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

尝试编程访问IIS

2020-07-21 04:14 1301 查看

终于有个机会需要编程访问IIS了,目的是对所有的IIS站点的目录分别压缩成一个RAR文件,方便备份到另外的地方去。

尝试了两种方式,一是用js调用ADSI,二是用C#引用System.DirectoryServices调用ADSI。最后用js写了相对完整的代码实现,如下所示。

代码var WinRARexe="C:\\Program Files\\WinRAR\\rar.exe"
var WshShell = WScript.CreateObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (!fso.FileExists(WinRARexe))
{
    WScript.Quit( 0 ); 
}

var sfn=WScript.ScriptFullName;
var sn=WScript.ScriptName;
/*获得脚本的当前路径,设置为备份的目录*/
var backupPath =sfn.substr(0,sfn.length-sn.length) ;

var tempFileName="";
var w3svc = GetObject( "IIS://localhost/w3svc" ); 
var e = new Enumerator( w3svc ); 
for(; ! e.atEnd(); e.moveNext() ) 

    var site = e.item(); 
    if(site.Class=="IIsWebServer")
    { 
        WScript.Echo( "Name[" + site.Name + "]\nADsPath[" + site.ADsPath + "]\nServerComment[" + site.ServerComment  + "]"); 
        var vird=GetObject(site.ADsPath + "/root");
        /*IIS站点目录*/
        WScript.Echo("WebSiteRoot[" + vird.Path + "]");
        tempFileName=site.ServerComment+"["+site.Name+"]"
        WScript.Echo(tempFileName);
        /*写命令*/
        //WshShell.Run("\"" + WinRARexe + "\" a -r  \"" + backupPath + tempFileName + ".rar\" \"" + vird.Path +  "\" ",1,true);
    }
}

WScript.Quit( 0 ); 


 如果是用C#引用System.DirectoryServices,则如下所示。

代码using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Text;

namespace IIScfg
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryEntry siteRoot;
            DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc");
            foreach (DirectoryEntry cc in w3svc.Children)
            {
                if ((string)cc.InvokeGet("Class") == "IIsWebServer")
                {
                    Console.WriteLine("Name[{0}]\nPath[{1}]", cc.Name, cc.Path);
                    Console.WriteLine("---{0}", (string)cc.InvokeGet("ServerComment"));
                    siteRoot = new DirectoryEntry(cc.Path + "/Root");
                    Console.WriteLine("---{0}", (string)siteRoot.InvokeGet("Path"));
                }
            }
        }
    }
}


参考的是MSDN中的IIS Programmatic Administration SDK, js写法相对简单,C#调用则要注意用InvokeGet获取属性更好。从长远来看,可以将IIS各个站点的IP、域名、主目录地址等信息都直接列出来,方便管理统计,否则一个一个去点开来看就太麻烦了,也不利于管控。

 

转载于:https://www.cnblogs.com/StevenLi/archive/2010/04/27/1722215.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: