Как определить, работает ли моя программа в среде Active Directory?

Как определить, работает ли моя программа в среде Active Directory?

Я использую C# и .Net 2.0

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
4 617
5

Ответы 5

Одним из способов может быть запрос переменной окружения LOGONSERVER. Это даст имя сервера вашего контроллера AD ... которое, насколько я знаю, будет пустым (или совпадать с текущей рабочей станцией? Не уверен), если он в настоящее время не вошел в домен.

Пример использования:

string ADServer = Environment.GetEnvironmentVariable("LOGONSERVER"); 

это также будет имя машины, если компьютер не является частью какого-либо домена

Ivan G. 26.08.2011 20:31

Попробуйте получить Environment.UserDomainName и сравнить его с Environment.MachineName. Если они совпадают, вероятно, у пользователя нет домена. Если они не совпадают, то пользователь входит в домен, который должен иметь сервер каталогов.

От http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.path.aspx

To bind to the current domain using LDAP, use the path "LDAP://RootDSE", then get the default naming context and rebind the entry.

Таким образом, без домена привязка к «LDAP: // RootDSE» должна либо завершиться ошибкой, либо ничего не вернуть. На себе не пробовал.

use System.DirectoryServices; // add reference to system.directoryservices.dll

...

DirectoryEntry ent = new DirectoryEntry("LDAP://RootDSE");
String str = ent.Properties["defaultNamingContext"][0];
DirectoryEntry domain = new DirectoryEntry("LDAP://" + str);

Это определенно более чистый способ проверки Active Directory, чем использование переменной среды (которую пользователь может удалить или добавить для подделки программы).

+1 Работает, спасибо. Единственное, когда машина не является членом домена, она ждет около 5 секунд, прежде чем выбросить COMException. Так что может быть лучше сначала вызвать Domain.GetComputerDomain() или IPGlobalProperties.GetIPGlobalProperties().DomainName, а затем, если это удастся, сделать это.

EMP 26.05.2012 13:19

Этот код проверяет, является ли сам компьютер членом домена.

using System.DirectoryServices.ActiveDirectory;


bool isDomain = false;

try
{
    Domain.GetComputerDomain();
    isDomain = true;
}
catch (ActiveDirectoryObjectNotFoundException)
{
}

Однако компьютер может находиться в домене, но текущий пользователь, вошедший в систему, может быть локальной учетной записью. Если вы хотите проверить это, используйте функцию Domain.GetCurrentDomain().

Я получаю false, когда я вошел в систему с локальным пользователем, true, когда я вошел в систему с пользователем домена ...

vIceBerg 26.09.2008 22:36

А как насчет домена NT4 без активного каталога?

VVS 01.10.2008 20:40

Это хорошо, но не надежно: ActiveDirectoryObjectNotFoundException также выдается, если по какой-либо причине невозможно связаться с контроллером домена, даже если машина является членом домена.

EMP 26.05.2012 11:55

Я нашел кое-что, что работает:

using System.Net.NetworkInformation;

IPGlobalProperties.GetIPGlobalProperties (). DomainName;

Работает с локальным пользователем и пользователем домена.

Выглядит многообещающе, но замечание в документе немного касается: «Если локальный компьютер зарегистрирован в домене, а затем переходит в рабочую группу, свойство DomainName по-прежнему возвращает предыдущее доменное имя, а не пустое» [msdn.microsoft.com/en-us/library/…

EMP 26.05.2012 13:22

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