Это немного неясно: мне нужно получить форму user @ domain для пользователя / группы, но мне НЕ нужна форма domain \ user. Однажды я столкнулся с проблемой длинных имен Windows 2003+, где они НЕ совпадают из-за ограничения длины домена \ пользователя, поскольку новая форма не имеет ограничения.
Я нахожусь под C #, и пока я могу делать следующее:
string GetUserName(SecurityIdentifier SID)
{
NTAccount account = SID.Translate(typeof(NTAccount));
string [] splits = string.Split("\\", account.Value);
return splits[1] + @"@" + splits[0];
}
Это не всегда правильно, как я уже говорил в своем вступлении, имя пользователя @ domain НЕ ОБЯЗАТЕЛЬНО совпадает со старой формой имени пользователя Windows NT. Если вы мне не верите, зайдите в AD Users и компьютеры на коробке 2k3 + и посмотрите, чем отличаются поля для старого имени пользователя NT от нового.
Так как же мне гарантировать, что я получу правильное имя пользователя @ домен из SID? Добавьте к этому, мне также нужно, чтобы этот тип вещей работал для локальных пользователей / групп.