我使用像在ASP.Net下面的代码在IIS枚举网站:

string metabasePath = "IIS://localhost/W3SVC";
DirectoryEntry service = new DirectoryEntry(metabasePath);

service.RefreshCache();
string className = service.SchemaClassName.ToString();

if (className.EndsWith("Service"))
{
    DirectoryEntries sites = service.Children;
    foreach (DirectoryEntry site in sites)
    {
        ProcessSite(site);
    }
}

但是,我发现,仅在第一11个16位的是不断进行处理。我跟这个打了几个小时,也找不到任何办法让过去在IIS中的前11位。我已经试图寻找递归中,我使用的DirectorySearcher无济于事试过,我试图列举多次或使用某种过滤器没有任何的运气。

任何想法?

谢谢!

〜mellamokb

有帮助吗?

解决方案

我已经决定使用WMI代替的DirectoryServices,这似乎很好地工作:

ManagementScope oms = new ManagementScope(@"\\.\root\MicrosoftIISv2");
oms.Connect();

ObjectQuery oQuery = new ObjectQuery("select * from IISWebServerSetting");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oms, oQuery);
foreach (ManagementObject oreturn in oSearcher.Get())
{
    Response.Write(oreturn["ServerComment"] + " (" + oreturn["Name"] + ")<br />");
}

其他提示

要枚举本地服务器上的所有网站,你可以尝试这样的:

class Program
{
    static void Main(string[] args)
    {
        var iis = new DirectoryEntry("IIS://localhost/W3SVC");
        var sites = (from DirectoryEntry entry in iis.Children
                     where entry.SchemaClassName == "IIsWebServer"
                     select entry).ToArray();

        foreach (var site in sites)
        {
            Console.WriteLine(site.Name);
        }
    }

您运行IIS 7的机会?如果是的话,这或许可以解释这个问题,因为元数据库兼容性的原因才存在;它不再是主存储。

您可能会需要解析的applicationHost.config代替 - 尽管WMI是一个不错的选择,太多

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top