fateame 发表于 2015-11-15 10:46:50

C#读取IIS信息

C#读取IIS信息,读取IIS的各站点信息,虚拟目录信息和物理路径信息;当一IIS网站绑定多个域名名称时,只读取第一个,
  public class IISWorker
{
    private static string HostName= "localhost";
    private static string UserName="";
    private static string Password="";
  #region 根据路径构造Entry的方法
    /// 根据是否有用户名来判断是否是远程服务器。
    /// 然后再构造出不同的DirectoryEntry出来
    /// DirectoryEntry的路径
    /// 返回的是DirectoryEntry实例
    public static DirectoryEntry GetDirectoryEntry(string entPath)
    {
      DirectoryEntry ent;
      if (UserName == null)
      {
            ent = new DirectoryEntry(entPath);
      }
      else
      {
            ent = new DirectoryEntry(entPath, UserName, Password, AuthenticationTypes.Secure);
      }
      return ent;
    }
    #endregion
  #region 得到网站的物理路径
    /// <summary>
    /// 得到网站的物理路径
    /// </summary>
    /// <param name=&quot;rootEntry&quot;>网站节点</param>
    /// <returns></returns>
    public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry)
    {
      string physicalPath = &quot;&quot;;
      foreach (DirectoryEntry childEntry in rootEntry.Children)
      {
            if ((childEntry.SchemaClassName == &quot;IIsWebVirtualDir&quot;) && (childEntry.Name.ToLower() == &quot;root&quot;))
            {
                if (childEntry.Properties[&quot;Path&quot;].Value != null)
                {
                  physicalPath = childEntry.Properties[&quot;Path&quot;].Value.ToString();
                }
                else
                {
                  physicalPath = &quot;&quot;;
                }
            }
      }
      return physicalPath;
    }
    #endregion
    /// <summary>
    /// 获取站点名
    /// </summary>
    public static List<IISInfo> GetServerBindings()
    {
      List<IISInfo> iisList = new List<IISInfo>();
      string entPath = String.Format(&quot;IIS://{0}/w3svc&quot;, HostName);
      DirectoryEntry ent = GetDirectoryEntry(entPath);
      foreach (DirectoryEntry child in ent.Children)
      {
            if (child.SchemaClassName.Equals(&quot;IIsWebServer&quot;, StringComparison.OrdinalIgnoreCase))
            {
                if (child.Properties[&quot;ServerBindings&quot;].Value != null)
                {
                  object objectArr = child.Properties[&quot;ServerBindings&quot;].Value;
                  string serverBindingStr = string.Empty;
                  if (IsArray(objectArr))//如果有多个绑定站点时
                  {
                        object[] objectToArr = (object[])objectArr;
                        serverBindingStr = objectToArr.ToString();
                  }
                  else//只有一个绑定站点
                  {
                        serverBindingStr = child.Properties[&quot;ServerBindings&quot;].Value.ToString();
                  }
                  IISInfo iisInfo = new IISInfo();
                  iisInfo.DomainPort = CoverWebSitePost(serverBindingStr);
                  iisInfo.MonitorName = GetWebSiteFirstName(serverBindingStr);
                  monitorUrl selectMonitor = ValidateMonitorName(iisInfo.MonitorName);
                  if (selectMonitor!=null)
                  {
                        iisInfo.SearchKeyWord = selectMonitor.Searchkey;
                        iisInfo.Url = selectMonitor.Monitorurl;
                  }
                  iisList.Add(iisInfo);
                }
            }
      }
      return iisList;
    }
    /// <summary>
    /// 获取虚拟目录
    /// </summary>
    public static List<IISInfo> GetVirtualDir()
    {
      Hashtable hashTVirtual = new Hashtable();
      List<IISInfo> iisList = new List<IISInfo>();
      string entPath = String.Format(&quot;IIS://{0}/w3svc&quot;, HostName);
      DirectoryEntry ent = GetDirectoryEntry(entPath);
      foreach (DirectoryEntry entry in ent.Children)
      {
            if (entry.SchemaClassName.Equals(&quot;IIsWebServer&quot;, StringComparison.OrdinalIgnoreCase))
            {
                DirectoryEntry virEntry = new DirectoryEntry(entry.Path   &quot;/ROOT&quot;);
                foreach (DirectoryEntry entryVirtual in virEntry.Children)
                {
                  IISInfo iisInfo = new IISInfo();
                  if (entryVirtual.SchemaClassName.Equals(&quot;IIsWebVirtualDir&quot;, StringComparison.OrdinalIgnoreCase))
                  {
                        //hashTVirtual.Add(entryVirtual.Name, entryVirtual.Properties[&quot;AppPoolId&quot;].Value);
                        iisInfo.DomainPort = CoverWebSitePost(entry.Properties[&quot;ServerBindings&quot;].Value.ToString());
                        iisInfo.MonitorName = CoverWebSitePost(entry.Properties[&quot;ServerBindings&quot;].Value.ToString()).Split(':');//entryVirtual.Name;
                        iisList.Add(iisInfo);
                  }
                }
            }
      }
      return iisList;
    }
    /// <summary>
    /// 转化域名和端口
    /// </summary>
    public static string CoverWebSitePost(string serverBindings)
    {
      string sitePost = string.Empty;
      string[] serverBindArr = serverBindings.Split(':');
      if (serverBindArr != null && serverBindArr.Length > 2)
      {
            sitePost = serverBindArr   &quot;:&quot;   serverBindArr;
      }
      return sitePost;
    }
    /// <summary>
    /// 取得域名和端口号
    /// </summary>
    public static string GetWebSiteFirstName(string serverBindings)
    {
      string siteFirst = string.Empty;
      string[] serverBindArr = serverBindings.Split(':');
      if (serverBindArr != null && serverBindArr.Length > 2)
      {
            siteFirst =serverBindArr;
      }
      return siteFirst;
    }
    /// <summary>
    /// 验证域名是否在配置文件的监控页中
    /// </summary>
    /// <param name=&quot;monitorName&quot;>域名</param>
    /// <returns></returns>
    public static monitorUrl ValidateMonitorName(string monitorName)
    {
      List<monitorUrl> listMonitorUrl = ReadXml.ReadMonitorUrl();
      monitorUrl selectMonitorUrl = null;
      foreach (monitorUrl item in listMonitorUrl)
      {
            if (WebClient.IsContain(item.Domain,monitorName))
            {
                selectMonitorUrl = item;
                break;
            }
      }
      return selectMonitorUrl;
    }
    /// <summary>
    /// 判断object对象是否为数组
    /// </summary>
    public static bool IsArray(object o)
    {
      return o is Array;
    }
  }
         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: C#读取IIS信息