How to find out if a computer is connected to novell eDirectory or Microsoft ActiveDirectory?
Я только что внедрил Novell eDirectory в своем приложении. Поскольку наше приложение поддерживает Microsoft ActiveDirectory, я хотел бы запретить использование дополнительного параметра конфигурации, например "Novell yes/no".
Итак, есть ли другой способ узнать, подключен ли компьютер к Microsoft ActiveDirectory или сети Novell?
3 ответа
Если вы хотите знать, является ли компьютер частью домена Windows, вы можете получить Win32_NTDomain
Информация WMI.
В PowerShell это дает:
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
Издание в соответствии с комментарием ScottTx вы также можете использовать Win32_ComputerSystem
Класс WMI
PS> (Get-WMIObject Win32_ComputerSystem).PartOfDomain
False
Согласно документации по классу Win32_NTDomain в C# вы можете получить это:
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");
}
}
}
}
Добавление ссылки на System.Management
сборка
Что ж, утверждение типа "быть подключенным к сети Novell" намного сложнее, чем раньше. Если пользователь на рабочей станции, использующий клиент Novell (Netware), вошел в систему на сервере Netware или на сервере, предлагающем такие службы NCP (Netware Core Protocol), как OES в Linux, то атрибут сетевого адреса в Edirectory должен присутствовать только в том случае, если пользователь в настоящее время вошел в EDirectory (NDS).
Иногда из-за глючного клиента этот атрибут отсутствует, если пользователь вошел в систему, но обычно этот атрибут - то, что вы можете использовать. Также вполне нормально, чтобы пользователь одновременно входил в AD & NDS. Кроме того, сама рабочая станция также может быть зарегистрирована в NDS в зависимости от конфигурации или используемых продуктов Novell.
Как вы подключаетесь? Через LDAP? Если так, ищите sAMAccountName, и это уникально для Active Directory. Каждый пользователь и группа в AD будет иметь этот атрибут (это обязательно). Принимая во внимание, что в eDirectory его никто не получит, если только он странным образом не расширил схему eDirectory, чтобы добавить его.
Вероятно, в RootDSE есть что-то, что укажет, в каком каталоге вы находитесь. Но я не уверен в отличном примере.