终于有个机会需要编程访问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