C # - ¿hay una manera de conseguir la ruta local del sitio FTP predeterminado?
-
18-09-2019 - |
Pregunta
¿Hay una manera de conseguir la ruta local del sitio FTP predeterminado (en IIS) mediante programación?
Al igual que C: \ Archivos de programa \ ftproot, se muestra a continuación:
Me imagino que sería algo como:
DirectoryEntry ftproot = new DirectoryEntry("IIS://localhost/MSFTPSVC/1/Root");
string directory; // = ftproot.something
¿Alguna idea?
Edit: Esto sería para IIS 6.0. Sin duda, esto tiene que ser almacenada en alguna parte - tal vez en el registro
Solución 2
Para IIS 6, al menos, lo encontré en el registro aquí:
HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services \ msftpsvc \ Parameters \ Virtual Roots \
Formato de los datos es un poco extraño - por ejemplo, D: \ ftproot ,, 1
Otros consejos
Por lo que sé, hay dos atributos de Active Directory:. MsIIS-FTPRoot, msIIS-FTPDir
Básicamente, la carpeta de inicio del usuario se determina en la autenticación mediante la consulta del msIIS-FTPRoot y msIIS-FTPDir atributos del objeto de usuario en Active Directory. La concatenación de los msIIS-FTPROOT y msIIS-ftpdir valores se obtiene un camino a la carpeta de inicio del usuario.
Un ejemplo puede tener este aspecto:
msIIS-FTPRoot = D:\FTP Users
msIIS-FTPDir = \JohnSmith
Esto dará lugar a "D: \ Usuarios \ FTP JohnSmith" como la carpeta de inicio del usuario
.El código para recorrer todos los usuarios y allí directorios por defecto:
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();
}