Pregunta

Esta mañana he descubierto un método agradable ( DirectoryEntry .Exists ), que debe ser capaz de verificar si existe o no un objeto de Active Directory en el servidor. Así que he intentado con un simple:

if (DirectoryEntry.Exists(path)) {}

Por supuesto que carece de sobrecargas para proporcionar credenciales con él. Porque, si se proporcionan credenciales no consigo este Excepción:

  

Error de inicio: nombre de usuario desconocido o   contraseña incorrecta.   (System.DirectoryServices.DirectoryServicesCOMException)

¿Hay alguna otra opción que me da la posibilidad de autenticar mi código en el servidor de AD? O para comprobar la existencia de un objeto?

¿Fue útil?

Solución

En este caso no se puede utilizar el método estático existe como usted ha dicho:

DirectoryEntry directoryEntry = new DirectoryEntry(path);
directoryEntry.Username = "username";
directoryEntry.Password = "password";

bool exists = false;
// Validate with Guid
try
{
    var tmp = directoryEntry.Guid;
    exists = true;
}
catch (COMException)
{
   exists = false; 
}

Otros consejos

No hay manera de hacer esto y yo he escrito un problema de conexión a es de esperar resolverlo.

DirectoryEntry.Exists no acepta credenciales

Así que la respuesta a la pregunta:. Imposible

Finalmente escribir un método propio para obtener el DirectoryEntry por su nombre distinguised, con credenciales especificadas. En ambos casos de existencia / inexistencia Tengo una instancia de DirectoryEntry. Para comprobar si se trata de un objeto válido volvió hago un try ... catch sencilla para ver si el resultado es una excepción. Si es así, es válido.

cheque desagradable, pero funciona. Lástima que el método DirectoryEntry.Exists .net por defecto no proporciona una sobrecarga para proporcionar credenciales al igual que el constructor DirectoryEntry ...

Si el usuario que ejecutó el proceso no tiene permisos para llamar DirectoryEntry.Exists, a continuación, puede utilizar la suplantación.

Esto puede ser útil (se analizan en la representación en una contexto AD): http: // www .codeproject.com / KB / sistema / everythingInAD.aspx

Por cierto, si ya tiene las credenciales de un usuario que tiene acceso a todo lo que necesita, ¿por qué no sólo el proceso con ese usuario (por ejemplo, / runas)?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top