zoukankan      html  css  js  c++  java
  • 尝试编程访问IIS

    终于有个机会需要编程访问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、域名、主目录地址等信息都直接列出来,方便管理统计,否则一个一个去点开来看就太麻烦了,也不利于管控。

    不会装糊涂,又看得太清楚~_~
  • 相关阅读:
    HDU 2563 统计问题 (DFS + 打表)
    KendoUi中KendoDropDownList控件的使用——三级级联模块的实现
    POJ 1325 && ZOJ 1364--Machine Schedule【二分图 && 最小点覆盖数】
    crontab FAQ
    思科2960trunk vlan配置及路由IP配置
    hdoj-1593-find a way to escape【数学题】
    Java编程思想(四) —— 复用类
    在 Android 应用程序中使用 SQLite 数据库以及怎么用
    Swift Standard Library Reference.pdf
    VC、IE、ASP环境下打印、预备的完美解决方式
  • 原文地址:https://www.cnblogs.com/StevenLi/p/1722215.html
Copyright © 2011-2022 走看看