Можно ли найти Основную группу Пользователя Active Directory в C#?

Python совершенствовался, операция разрезания имеет едва известный элемент синтаксиса, замещающий знак:

>>> class C(object):
...  def __getitem__(self, item):
...   return item
... 
>>> C()[1:2, ..., 3]
(slice(1, 2, None), Ellipsis, 3)

, К сожалению, это едва полезно, поскольку замещающий знак только поддерживается, если кортежи включены.

5
задан Andy May 24 July 2009 в 19:57
поделиться

2 ответа

Это довольно запутанный и сложный бизнес, но этот фрагмент кода взят из моего BeaverTail ADSI-браузера, который я полностью написал на C # (в дни .NET 1.1) и является известно, что работает - не очень, но функционально:

private string GetPrimaryGroup(DirectoryEntry aEntry, DirectoryEntry aDomainEntry)
{
   int primaryGroupID = (int)aEntry.Properties["primaryGroupID"].Value;
   byte[] objectSid = (byte[])aEntry.Properties["objectSid"].Value;

   StringBuilder escapedGroupSid = new StringBuilder();

   // Copy over everything but the last four bytes(sub-authority)
   // Doing so gives us the RID of the domain
   for(uint i = 0; i < objectSid.Length - 4; i++)
   {
      escapedGroupSid.AppendFormat("\\{0:x2}", objectSid[i]);
   }

   //Add the primaryGroupID to the escape string to build the SID of the primaryGroup
   for(uint i = 0; i < 4; i++)
   {
      escapedGroupSid.AppendFormat("\\{0:x2}", (primaryGroupID & 0xFF));
      primaryGroupID >>= 8;
   }

   //Search the directory for a group with this SID
   DirectorySearcher searcher = new DirectorySearcher();
   if(aDomainEntry != null)
   {
       searcher.SearchRoot = aDomainEntry;
   }

   searcher.Filter = "(&(objectCategory=Group)(objectSID=" + escapedGroupSid.ToString() + "))";
   searcher.PropertiesToLoad.Add("distinguishedName");

   return searcher.FindOne().Properties["distinguishedName"][0].ToString();
}

Надеюсь, это поможет.

Марк

6
ответ дан 15 December 2019 в 01:08
поделиться

Это зависит от того, что вы пытаетесь сделать.

1) Вы хотите сборку + постановку запустить как одну операцию? Чтобы вы получили один консолидированный отчет о сборке, один файл журнала, одно задание в очереди сборки сервера, каждый шаг, выполняемый последовательно тем же агентом сборки, который выполнил предыдущий шаг?

Если да, то вы в основном находитесь на правильный путь. Я бы не стал > использовать tfsbuild.exe - запуск всей новой сборки имеет много накладных расходов, и я не уверен, каковы возможные побочные эффекты. Вместо этого я бы использовал задачу > для выполнения задач msbuild, определенных в ваших промежуточных сценариях.

2) Вы хотите, чтобы «сборка сборки» фактически помещалась в очередь отдельного? После получения этого значения вам нужно будет преобразовать его в SID для основной группы, а затем получить группу из этого.

В статье базы знаний есть более подробные сведения об этом, а также код VB с указанием того, как чтобы найти основную группу, здесь: http://support.microsoft.com/kb/297951

0
ответ дан 15 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: