设为首页 收藏本站
查看: 645|回复: 0

[经验分享] IIS管理类(C#)

[复制链接]

尚未签到

发表于 2015-8-15 10:08:36 | 显示全部楼层 |阅读模式
using System;   

using System.Data;   

using System.DirectoryServices;   

using System.Collections;   

namespace Aspcn.Management   

{   

/// <summary>   

/// IISManager 的摘要说明。   

/// </summary>   

public class IISManager   

{   

//定义需要使用的   

private string _server,_website;   

private VirtualDirectories _virdirs;   

protected System.DirectoryServices.DirectoryEntry rootfolder;   

private bool _batchflag;   

public IISManager()   

{   

//默认情况下使用localhost,即访问本地机   

_server = "localhost";   

_website = "1";   

_batchflag = false;   

}   

public IISManager(string strServer)   

{   

_server = strServer;   

_website = "1";   

_batchflag = false;   

}   

/// <summary>   

/// 定义公共属性   

/// </summary>   



//Server属性定义访问机器的名字,可以是IP与计算名   

public string Server   

{   

get{ return _server;}   

set{ _server = value;}   

}   

//WebSite属性定义,为一数字,为方便,使用string   

//一般来说第一台主机为1,第二台主机为2,依次类推   

public string WebSite   

{   

get{ return _website; }   

set{ _website = value; }   

}   



//虚拟目录的名字   

public VirtualDirectories VirDirs   

{   

get{ return _virdirs; }   

set{ _virdirs = value;}   

}   

///<summary>   

///定义公共方法   

///</summary>   



//连接服务器   

public void Connect()   

{   

ConnectToServer();   

}   

//为方便重载   

public void Connect(string strServer)   

{   

_server = strServer;   

ConnectToServer();   

}   

//为方便重载   

public void Connect(string strServer,string strWebSite)   

{   

_server = strServer;   

_website = strWebSite;   

ConnectToServer();   

}   

//判断是否存这个虚拟目录   

public bool Exists(string strVirdir)   

{   

return _virdirs.Contains(strVirdir);   

}   

//添加一个虚拟目录   

public void Create(VirtualDirectory newdir)   

{   

string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;   

if(!_virdirs.Contains(newdir.Name) || _batchflag )   

{   

try   

{   

//加入到ROOT的Children集合中去   

DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");   

newVirDir.Invoke("AppCreate",true);   

newVirDir.CommitChanges();   

rootfolder.CommitChanges();   

//然后更新数据   

UpdateDirInfo(newVirDir,newdir);   

}   

catch(Exception ee)   

{   

throw new Exception(ee.ToString());   

}   

}   

else   

{   

throw new Exception("This virtual directory is already exist.");   

}   

}   

//得到一个虚拟目录   

public VirtualDirectory GetVirDir(string strVirdir)   

{   

VirtualDirectory tmp = null;   

if(_virdirs.Contains(strVirdir))   

{   

tmp = _virdirs.Find(strVirdir);   

((VirtualDirectory)_virdirs[strVirdir]).flag = 2;   

}   

else   

{   

throw new Exception("This virtual directory is not exists");   

}   

return tmp;   

}   



//更新一个虚拟目录   

public void Update(VirtualDirectory dir)   

{   

//判断需要更改的虚拟目录是否存在   

if(_virdirs.Contains(dir.Name))   

{   

DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");   

UpdateDirInfo(ode,dir);   

}   

else   

{   

throw new Exception("This virtual directory is not exists.");   

}   

}   

    

//删除一个虚拟目录   

public void Delete(string strVirdir)   

{   

if(_virdirs.Contains(strVirdir))   

{   

object[] paras = new object[2];   

paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录   

paras[1] = strVirdir;   

rootfolder.Invoke("Delete",paras);   

rootfolder.CommitChanges();   

}   

else   

{   

throw new Exception("Can’’’’t delete " + strVirdir + ",because it isn’’’’t exists.");   

}   

}   

//批量更新   

public void UpdateBatch()   

{   

BatchUpdate(_virdirs);   

}   

//重载一个:-)   

public void UpdateBatch(VirtualDirectories vds)   

{   

BatchUpdate(vds);   

}   

    

///<summary>   

///私有方法   

///</summary>   



//连接服务器   

private void ConnectToServer()   

{   

string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";   

try   

{   

this.rootfolder = new DirectoryEntry(strPath);   

_virdirs = GetVirDirs(this.rootfolder.Children);   

}   

catch(Exception e)   

{   

throw new Exception("Can’’’’t connect to the server ["+ _server +"] ...",e);   

}   

}   

//执行批量更新   

private void BatchUpdate(VirtualDirectories vds)   

{   

_batchflag = true;   

foreach(object item in vds.Values)   

{   

VirtualDirectory vd = (VirtualDirectory)item;   

switch(vd.flag)   

{   

case 0:   

break;   

case 1:   

Create(vd);   

break;   

case 2:   

Update(vd);   

break;   

}   

}   

_batchflag = false;   

}   

//更新东东   

private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)   

{   

de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;   

de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;   

de.Properties["AccessRead"][0] = vd.AccessRead;   

de.Properties["AccessExecute"][0] = vd.AccessExecute;   

de.Properties["AccessWrite"][0] = vd.AccessWrite;   

de.Properties["AuthBasic"][0] = vd.AuthBasic;   

de.Properties["AuthNTLM"][0] = vd.AuthNTLM;   

de.Properties["ContentIndexed"][0] = vd.ContentIndexed;   

de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;   

de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;   

de.Properties["AccessSSL"][0] = vd.AccessSSL;   

de.Properties["AccessScript"][0] = vd.AccessScript;   

de.Properties["DefaultDoc"][0] = vd.DefaultDoc;   

de.Properties["Path"][0] = vd.Path;   

de.CommitChanges();   

}   



//获取虚拟目录集合   

private VirtualDirectories GetVirDirs(DirectoryEntries des)   

{   

VirtualDirectories tmpdirs = new VirtualDirectories();   

foreach(DirectoryEntry de in des)   

{   

if(de.SchemaClassName == "IIsWebVirtualDir")   

{   

VirtualDirectory vd = new VirtualDirectory();   

vd.Name = de.Name;   

vd.AccessRead = (bool)de.Properties["AccessRead"][0];   

vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];   

vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];   

vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];   

vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];   

vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];   

vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];   

vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];   

vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];   

vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];   

vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];   

vd.AccessScript = (bool)de.Properties["AccessScript"][0];   

vd.Path = (string)de.Properties["Path"][0];   

vd.flag = 0;   

vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];   

tmpdirs.Add(vd.Name,vd);   

}   

}   

return tmpdirs;   

}   



}   

/// <summary>   

/// VirtualDirectory类   

/// </summary>   

public class VirtualDirectory   

{   

private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;   

private string _ausername,_auserpass,_name,_path;   

private int _flag;   

private string _defaultdoc;   

/// <summary>   

/// 构造函数   

/// </summary>   

public VirtualDirectory()   

{   

SetValue();   

}   

public VirtualDirectory(string strVirDirName)   

{   

_name = strVirDirName;   

SetValue();   

}   

private void SetValue()   

{   

_read = true;_execute = false;_script = false;_ssl= false;_write=false;_authbasic=false;_authntlm=false;   

_indexed = false;_endirbrow=false;_endefaultdoc = false;   

_flag = 1;   

_defaultdoc = "default.htm,default.aspx,default.asp,index.htm";   

_path = "C:\\";   

_ausername = "";_auserpass ="";_name="";   

}   

///<summary>   

///定义属性,IISVirtualDir太多属性了   

///我只搞了比较重要的一些,其它的大伙需要的自个加吧。   

///</summary>   



public int flag   

{   

get{ return _flag;}   

set{ _flag = value;}   

}   

public bool AccessRead   

{   

get{ return _read;}   

set{ _read = value;}   

}   

public bool AccessWrite   

{   

get{ return _write;}   

set{ _write = value;}   

}   

public bool AccessExecute   

{   

get{ return _execute;}   

set{ _execute = value;}   

}   

public bool AccessSSL   

{   

get{ return _ssl;}   

set{ _ssl = value;}   

}   

public bool AccessScript   

{   

get{ return _script;}   

set{ _script = value;}   

}   

public bool AuthBasic   

{   

get{ return _authbasic;}   

set{ _authbasic = value;}   

}   

public bool AuthNTLM   

{   

get{ return _authntlm;}   

set{ _authntlm = value;}   

}   

public bool ContentIndexed   

{   

get{ return _indexed;}   

set{ _indexed = value;}   

}   

public bool EnableDirBrowsing   

{   

get{ return _endirbrow;}   

set{ _endirbrow = value;}   

}   

public bool EnableDefaultDoc   

{   

get{ return _endefaultdoc;}   

set{ _endefaultdoc = value;}   

}   

public string Name   

{   

get{ return _name;}   

set{ _name = value;}   

}   

public string Path   

{   

get{ return _path;}   

set{ _path = value;}   

}   

public string DefaultDoc   

{   

get{ return _defaultdoc;}   

set{ _defaultdoc = value;}   

}   

public string AnonymousUserName   

{   

get{ return _ausername;}   

set{ _ausername = value;}   

}   

public string AnonymousUserPass   

{   

get{ return _auserpass;}   

set{ _auserpass = value;}   

}   

}   

/// <summary>   

/// 集合VirtualDirectories   

/// </summary>   



public class VirtualDirectories : System.Collections.Hashtable   

{   

public VirtualDirectories()   

{   

}   

//添加新的方法   

public VirtualDirectory Find(string strName)   

{   

return (VirtualDirectory)this[strName];   

}   

}   

}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-99230-1-1.html 上篇帖子: IIS log file 下篇帖子: 用户"IIS APPPOOL\xxxxxxxx"登录失败解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表