visual studio microsoft español descargar community c# ldap

studio - Cómo verificar en C#si la cuenta de usuario está activa



visual studio installer (5)

Prueba esto.

var server = "YOURMACHINENAME"; var username = "Guest"; var de = new DirectoryEntry {Path = "WinNT://" + server + ",computer"}; var result = de.Children .Cast<DirectoryEntry>() .First<DirectoryEntry>(d => d.SchemaClassName == "User" && d.Properties["Name"].Value.ToString() == username); var flags = (int)result.Properties["UserFlags"].Value; var disabled = (flags & 2) == 2;

¿Cómo puedo verificar desde C # si una cuenta de usuario local (concretamente la cuenta de administrador local) está activa?

Lo que realmente quiero es un reemplazo de C # para el resultado "Account Active" = "Yes" (o "No") del comando "net user Administrator".

Me temo que esta pregunta parece un duplicado a esta , pero no sé qué pasar para el parámetro del objeto raíz Entrada de directorio. Probé cosas diferentes como "ldap: //" + Environment.MachineName, "ldap: //127.0.0.1", "WinNT: //" + Environment.MachineName, pero ninguno funcionó. El buscador me arroja una excepción. Llamada Find All () en los tres casos.


Puede consultar Win32_UserAccount de WMI

Este es un prototipo que el creador del código wmi de MS escupe como referencia;

using System; using System.Management; using System.Windows.Forms; namespace WMISample { public class MyWMIQuery { public static void Main() { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root//CIMV2", "SELECT Disabled FROM Win32_UserAccount WHERE name = ''alexk''"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("-----------------------------------"); Console.WriteLine("Win32_UserAccount instance"); Console.WriteLine("-----------------------------------"); Console.WriteLine("Disabled: {0}", queryObj["Disabled"]); Console.ReadKey(); } } catch (ManagementException e) { MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); } } } }

(Me gustaría vincular la herramienta, pero como de costumbre los enlaces msdn están muertos)


Teniendo en cuenta que es un usuario local, debe llamar a la función api win32 NetGetUserInfo para obtener lo que necesita.

El ejemplo en pinvoke.net es casi lo que necesita, sin embargo, necesita cambiar el parámetro de nivel a 2 para obtener la información necesaria


class Program { static void Main(string[] args) { // Create the context for the principal object. PrincipalContext ctx = new PrincipalContext(ContextType.Machine); UserPrincipal u = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "Administrator"); Console.WriteLine(String.Format("Administrator is enable: {0}", u.Enabled)); } }


Esto no es lo mismo pero usan DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("WinNT://{0}/{1}", computerName, username)); ¿Eso ayudaría?