2010-01-06 127 views
0

有沒有辦法以編程方式獲取默認FTP站點(在IIS中)的本地路徑?C# - 有沒有辦法獲得默認FTP站點的本地路徑?

像C:\ Program Files文件\ FTPROOT,如下圖所示:

alt text

我想像它會是這樣的:

DirectoryEntry ftproot = new DirectoryEntry("IIS://localhost/MSFTPSVC/1/Root"); 
string directory; // = ftproot.something 

任何想法?

編輯:這將用於IIS 6.0。當然,這必須存儲在某個地方 - 可能在註冊表中?

+0

這篇文章可以幫助(IIS7只): - [自動化IIS管理與C#(http://forums.iis.net/t /1150298.aspx)第二個回覆中的代碼。 – GrayWizardx 2010-01-06 05:26:18

回答

0

對於IIS 6,至少,我發現它在註冊表中的位置:

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \服務\ MSFTPSVC \參數\虛擬根\

數據的格式是有點怪 - 例如,d:\ FTPROOT ,, 1

alt text

+0

我很好奇D:\ ftproot ,, 1中間的值是什麼。看起來最後一個值是讀取和寫入權限的總和,其中read = 1,write = 2。 – 2010-01-06 17:50:18

2

據我所知,有兩個Active Directory屬性:msIIS-FTPROOT,msIIS-FTPDir。

Technet

基本上,用戶的主文件夾驗證時由查詢msIIS-FTPROOT和msIIS-FTPDir確定在Active Directory用戶對象的屬性。 msIIS-FTPRoot和msIIS-FTPDir值的連接會生成用戶主文件夾的路徑。

一個例子可以是這樣的:

msIIS-FTPRoot = D:\FTP Users 
    msIIS-FTPDir = \JohnSmith 

這將導致 「d:\ FTP用戶\ JohnSmith對」 作爲用戶的主文件夾。

代碼遍歷所有用戶有默認目錄:

static void Main(string[] args) 
      {    
       string domain = Environment.GetEnvironmentVariable("USERDNSDOMAIN"); 
       string dc = GetDC(domain); 
       string ldap = String.Format("LDAP://{0}/{1}", domain, dc); 
       DirectoryEntry e = new DirectoryEntry(ldap); 

       DirectorySearcher src = new DirectorySearcher(e, "(objectClass=user)"); 
       SearchResultCollection res = src.FindAll(); 
       foreach (SearchResult r in res) 
       { 
        DirectoryEntry f = r.GetDirectoryEntry(); 
        Console.WriteLine(f.Name + "\t" + f.Properties["msIIS-FTPRoot"].Value + f.Properties["msIIS-FTPDir"].Value); 
       } 
       Console.ReadKey(); 
      } 

private static string GetDC(string domain) 
     { 
      StringBuilder sb = new StringBuilder(domain); 
      sb.Replace(".", ",DC="); 
      sb.Insert(0, "DC="); 
      return sb.ToString(); 
     } 
+0

對不起,GetDC()定義在哪裏? – 2010-01-06 06:19:14

+0

對不起。代碼已更新。 – 2010-01-06 08:28:19

相關問題