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 есть что-то, что укажет, в каком каталоге вы находитесь. Но я не уверен в отличном примере.

Другие вопросы по тегам