c# - ¿Cómo saber si una computadora está conectada a novell eDirectory o Microsoft ActiveDirectory?
.net active-directory (3)
Acabo de implementar Novell eDirectory en mi aplicación. Dado que nuestra aplicación es compatible con Microsoft ActiveDirectory, me gustaría evitar un parámetro de configuración adicional como "Novell yes / no".
Entonces, ¿hay otra forma de averiguar si la computadora está conectada a un Microsoft ActiveDirectory o a una red Novell?
¿Cómo te estás conectando? A través de LDAP? Si es así, busque sAMAccountName y que sea exclusivo de Active Directory. Cada usuario y grupo en AD tendrá ese atributo (es obligatorio). Mientras que en eDirectory nadie lo tendrá, a menos que extiendan extrañamente el esquema de eDirectory para agregarlo.
Probablemente hay algo en RootDSE que indicará cuál es su directorio de origen. Pero no estoy seguro de un gran ejemplo de improviso.
Bueno, una afirmación como "estar conectado a una red Novell" es mucho más vago de lo que solía ser. Si un usuario en una estación de trabajo que utiliza el cliente Novell (Netware) inicia sesión en un servidor NetWare o un servidor que ofrece NCP (Protocolo Principal Netware) como servicios como OES en Linux, entonces el Atributo de Dirección de Red en Edirectory solo debe estar presente si el usuario está actualmente conectado a EDirectory (NDS).
Algunas veces, debido a un cliente con errores este atributo no está presente si un usuario está conectado, pero generalmente ese atributo es lo que puede usar. Además, es completamente normal que el usuario inicie sesión en AD & NDS al mismo tiempo. Además, la estación de trabajo también puede registrarse en NDS en función de la configuración o los productos de Novell en uso.
Si desea saber si una computadora es parte de un dominio de Windows, puede obtener la información Win32_NTDomain
WMI.
En PowerShell, da:
Get-WmiObject Win32_NTDomain
ClientSiteName : Default-First-Site-Name
DcSiteName : Default-First-Site-Name
Description : DOM
DnsForestName : dom.fr
DomainControllerAddress : //192.168.183.100
DomainControllerName : //WM2008R2ENT
DomainName : DOM
Roles :
Status : OK
Edición según el comentario de @ScottTx , también puedes usar la clase WMI Win32_ComputerSystem
PS> (Get-WMIObject Win32_ComputerSystem).PartOfDomain
False
De acuerdo con la documentación de la clase Win32_NTDomain en C #, puede obtenerlo de la siguiente manera:
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
namespace WMIQuery
{
class WmiQuery
{
static void Main(string[] args)
{
ManagementObjectSearcher domainInfos = new ManagementObjectSearcher("select * from WIN32_NTDomain");
foreach (ManagementObject domainInfo in domainInfos.Get())
{
Console.WriteLine("Name : {0}", domainInfo.GetPropertyValue("Name"));
Console.WriteLine("Computer/domain : {0}", domainInfo.GetPropertyValue("Caption"));
Console.WriteLine("Domain name : {0}", domainInfo.GetPropertyValue("DomainName"));
Console.WriteLine("Status : {0}", domainInfo.GetPropertyValue("Status"));
}
// Edition according to @ScottTx comment you can also use `Win32_ComputerSystem` WMI class
ManagementObjectSearcher ComputerInfos = new ManagementObjectSearcher("select * from Win32_ComputerSystem");
foreach (ManagementObject ComputerInfo in ComputerInfos.Get())
{
if ((bool)ComputerInfo.GetPropertyValue("PartOfDomain"))
Console.WriteLine("This computer is part of domain");
else
Console.WriteLine("This computer is not part of domain");
}
}
}
}
Agregar una referencia al ensamblado System.Management