Python совершенствовался, операция разрезания имеет едва известный элемент синтаксиса, замещающий знак:
>>> class C(object):
... def __getitem__(self, item):
... return item
...
>>> C()[1:2, ..., 3]
(slice(1, 2, None), Ellipsis, 3)
, К сожалению, это едва полезно, поскольку замещающий знак только поддерживается, если кортежи включены.
Это довольно запутанный и сложный бизнес, но этот фрагмент кода взят из моего 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();
}
Надеюсь, это поможет.
Марк
Это зависит от того, что вы пытаетесь сделать.
1) Вы хотите сборку + постановку запустить как одну операцию? Чтобы вы получили один консолидированный отчет о сборке, один файл журнала, одно задание в очереди сборки сервера, каждый шаг, выполняемый последовательно тем же агентом сборки, который выполнил предыдущий шаг?
Если да, то вы в основном находитесь на правильный путь. Я бы не стал
2) Вы хотите, чтобы «сборка сборки» фактически помещалась в очередь отдельного? После получения этого значения вам нужно будет преобразовать его в SID для основной группы, а затем получить группу из этого.
В статье базы знаний есть более подробные сведения об этом, а также код VB с указанием того, как чтобы найти основную группу, здесь: http://support.microsoft.com/kb/297951