2013-10-23 32 views
0

我從本地IIS管理器6使用DirectoryEntry類獲取所有網站,我想獲取每個Web應用程序的本地路徑,但不知道如何獲取它,是否有我可以枚舉目錄條目的所有屬性?獲取來自目錄條目對象的所有屬性名稱和值

DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC"); 

foreach (DirectoryEntry e in root.Children) 
{ 
    if (e.SchemaClassName == "IIsWebServer") 
    { 
     Console.WriteLine(e.Properties["ServerComment"].Value.ToString()); 
     // how can I enumerate all properties and there values here ? 
     // maybe write to a xml document to find the local path property 

回答

1

我想你可以使用下面的代碼來找到你需要的東西。如果其他問題只是使用相同的方法。此代碼適用於IIS6。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 



using System.DirectoryServices; 

namespace IIS_6 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC"); 
      string VirDirSchemaName = "IIsWebVirtualDir"; 

      foreach (DirectoryEntry e in root.Children) 
      { 

       foreach (DirectoryEntry folderRoot in e.Children) 
       { 
        foreach (DirectoryEntry virtualDirectory in folderRoot.Children) 
        { 
         if (VirDirSchemaName == virtualDirectory.SchemaClassName) 
         { 
          Console.WriteLine(String.Format("\t\t{0} \t\t{1}", virtualDirectory.Name, virtualDirectory.Properties["Path"].Value)); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

至於IIS 7我寫了這個代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

// to add it from %windir%\System32\InetSrv\Microsoft.Web.Administration.dll 
using Microsoft.Web.Administration; 

namespace IIS_7 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (ServerManager serverManager = new ServerManager()) 
      { 
       foreach (var site in serverManager.Sites) 
       { 

        Console.WriteLine(String.Format("Site: {0}", site.Name)); 

        foreach (var app in site.Applications) 
        { 
         var virtualRoot = app.VirtualDirectories.Where(v => v.Path == "/").Single(); 

         Console.WriteLine(String.Format("\t\t{0} \t\t{1}", app.Path, virtualRoot.PhysicalPath)); 
        } 
       } 
      } 
     } 
    } 
}