有没有办法以编程方式获取默认FTP站点的本地路径(在IIS中)?
与C:\ program files \ ftproot类似,如下所示:
我想它会是这样的:
DirectoryEntry ftproot = new DirectoryEntry("IIS://localhost/MSFTPSVC/1/Root");
string directory; // = ftproot.something
有什么想法吗?
编辑:这适用于IIS 6.0。当然这必须存储在某个地方 - 也许是在注册表中?
答案 0 :(得分:2)
据我所知,有两个Active Directory属性:msIIS-FTPRoot,msIIS-FTPDir。
来自Technet
基本上,通过查询Active Directory中用户对象的msIIS-FTPRoot和msIIS-FTPDir属性,可以在验证时确定用户的主文件夹。 msIIS-FTPRoot和msIIS-FTPDir值的串联将导致用户主文件夹的路径。
示例可能如下所示:
msIIS-FTPRoot = D:\FTP Users
msIIS-FTPDir = \JohnSmith
这将导致“D:\ FTP Users \ 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();
}
答案 1 :(得分:0)
至少对于IIS 6,我在注册表中找到了它:
HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ MSFtpsvc \ Parameters \ Virtual Roots \
数据的格式有点奇怪 - 例如,D:\ ftproot ,, 1