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?