C#获取IIS所有站点及虚拟目录和应用程序(包含名称及详细信息)

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.DirectoryServices;
using System.Diagnostics;

namespace WindowsFormsApplication13
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        void ShowEntry(DirectoryEntry entry)
        {
            foreach (DirectoryEntry childEntry in entry.Children)
            {
                if (childEntry.SchemaClassName == "IIsWebServer")
                {
                    Debug.Print(childEntry.SchemaClassName + "" + childEntry.Properties["ServerComment"].Value.ToString());
                    Debug.Print("*********************Start*************************");
                    foreach (var name in childEntry.Properties.PropertyNames)
                    {
                        Debug.Print(name + ":" + childEntry.Properties[name.ToString()].Value);
                    }
                    Debug.Print("*********************End*************************");
                }
                else if (childEntry.SchemaClassName == "IIsWebVirtualDir")
                {
                    Debug.Print(childEntry.SchemaClassName + "" + childEntry.Name);
                    Debug.Print("*********************Start*************************");
                    foreach (var name in childEntry.Properties.PropertyNames)
                    {
                        Debug.Print(name + ":" + childEntry.Properties[name.ToString()].Value);
                    }
                    Debug.Print("*********************End*************************");
                }
                else
                {
                    //Debug.Print(childEntry.SchemaClassName);
                }
                ShowEntry(childEntry);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ShowEntry(new DirectoryEntry("IIS://localhost/w3svc"));
        }
    }
}
复制代码

 获取IIS树型目录:

复制代码
public class SiteInfo
        {
            public string Name { get; set; }
            public string Path { get; set; }
            public bool IsApp { get; set; }
            public List<SiteInfo> Children { get; set; }
        }

        List<SiteInfo> getSiteList(DirectoryEntry entry)
        {
            var result = new List<SiteInfo>();
            foreach (DirectoryEntry childEntry in entry.Children)
            {
                var sites = getSiteList(childEntry);
                if (childEntry.SchemaClassName == "IIsWebServer")
                {
                    var site = new SiteInfo();
                    site.Name = childEntry.Properties["ServerComment"].Value.ToString();
                    site.Path = sites[0].Path;
                    site.IsApp = true;
                    site.Children = new List<SiteInfo>();
                    foreach (var subSite in sites[0].Children)
                        site.Children.Add(subSite);
                    result.Add(site);
                }
                else if (childEntry.SchemaClassName == "IIsWebVirtualDir")
                {
                    var site = new SiteInfo();
                    site.Name = childEntry.Name;
                    site.Path = childEntry.Properties["Path"].Value.ToString();
                    site.Children = sites;
                    if (childEntry.Properties.Contains("AppRoot")
                        && childEntry.Properties["AppRoot"].Value != null
                        && !string.IsNullOrEmpty(childEntry.Properties["AppRoot"].Value.ToString()))
                        site.IsApp = true;
                    result.Add(site);
                }
            }
            return result;
        }
复制代码

 

复制代码
        public List<KeyValuePair<SiteInfo, string>> getFlatSiteList(List<SiteInfo> sites, string parentPadding = "")
        {
            var result = new List<KeyValuePair<SiteInfo, string>>();
            foreach (var site in sites)
            {
                var currentPrefix = parentPadding == string.Empty ? string.Empty : "" + parentPadding;
                result.Add(new KeyValuePair<SiteInfo, string>(site, currentPrefix + site.Name));
                result.AddRange(getFlatSiteList(site.Children, parentPadding + "--"));
            }
            return result;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var siteList = getSiteList(new DirectoryEntry("IIS://localhost/w3svc"));
            var flatSiteList = getFlatSiteList(siteList);
            foreach (var list in flatSiteList)
                Debug.Print(list.Value);
        }
复制代码

 

posted on   空明流光  阅读(6831)  评论(1编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示