uncategorized

顯示IIS所有站台列表

如何讓人員在不登入IIS主機情況下,可以遠端了解IIS主機中自己的Web Site狀況以及還可以
有時候能遠端重啟自己的Application Pool。

首先必須要確認IIS中有幾個站台(非一個站台下的虛擬目錄的站台),以下圖為例共有兩個站台,而在Default Web Site又有兩個網站

我們可以使用DirectoryEntry類別取得資訊。

DirectoryEntry類別:封裝 Active Directory 網域服務階層架構中的節點或物件。

1
2
3
4
5
6
7
8
DirectoryEntry root = new DirectoryEntry(@"IIS://HostName/W3SVC");
foreach (DirectoryEntry ww in root.Children)
{
if (ww.SchemaClassName == "IIsWebServer")
{
Response.Write(ww.Name + "<br>");
}
}

其中ww.Name只會回傳Web Site之ID,並非真正網站名稱,若是要顯示Web Site名稱,還要加上ww.Properties[“ServerComment”].Value.ToString()就可以顯示名稱

取得網站節點後,再取得網站下的虛擬目錄名稱或是Web Stie

1
2
3
4
5
DirectoryEntry root2 = new DirectoryEntry(string.Format(@"IIS://HostName/W3SVC/{0}/root", strID));
foreach (DirectoryEntry ss in root2.Children)
{
Response.Write( ss.Name + "<br>");
}

就可以取得下面所有虛擬目錄的站台

若是在管理上,我們又想知道每個虛擬目錄對應的Application Pool Name是甚麼時候,可以補上ss.Properties[“AppPoolId”].Value.ToString(),就可以取得每個站台對應的Pool Name。有了Application Pool Name就可以進行遠端管理,相關作法下一篇再說明


完整程式碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void ListWebSite()
{
DirectoryEntry root = new DirectoryEntry(@"IIS://JAIGI-PC/W3SVC");
foreach (DirectoryEntry ww in root.Children)
{
if (ww.SchemaClassName == "IIsWebServer")
{
Response.Write(ww.Name + ":"+ww.Properties["ServerComment"].Value.ToString()+"<br>");
Response.Write("<br>");
ListWeb(ww.Name);
}
}
}
private void ListWeb(string strID)
{
DirectoryEntry root2 = new DirectoryEntry(string.Format(@"IIS://JAIGI-PC/W3SVC/{0}/root", strID));
foreach (DirectoryEntry ss in root2.Children)
{
Response.Write( ss.Name + ":"+ss.Properties["AppPoolId"].Value.ToString()+"<br>");
}
}