Получить локального пользователя по SID - PullRequest
2 голосов
/ 28 февраля 2011

Вопрос: Я хочу получить локального пользователя Windows по SID :

Я нашел этот код

[ADSI]("WinNT://$Env:Computername/<SID=S-1-5-18>")

здесь: http://www.eggheadcafe.com/software/aspnet/32882679/add-builtin-account-to-local-group-using-winnt-adsi-provider.aspx

Я понял из этого, я мог бы сделать это в (VB) .NET с этим:

Dim strURL As String = "WinNT://" + strComputerName + "/<SID=" + strSID + ">"
Dim de As DirectoryServices.DirectoryEntry = New DirectoryServices.DirectoryEntry(strURL)
de.Properties("whatever").Value.ToString()

Однако, это не работает.Кто-нибудь знает, как я могу сделать это БЕЗ зацикливания на всех пользователях (для этого необходимо сначала преобразовать byte [] в строку, а затем сравнить [без учета регистра] много строк, что замедляет его).1016 *

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Если вы используете .NET 3.5 или новее, вы можете использовать этот код (после добавления ссылки на новое пространство имен System.DirectoryServices.AccountManagement в ваш проект):

using System.DirectoryServices.AccountManagement;

// create a machine-context (local machine)
PrincipalContext ctx = new PrincipalContext(ContextType.Machine);

UserPrincipal up = UserPrincipal.FindByIdentity(ctx, IdentityType.Sid, <YourSidHere>);

if (up != null)
{
    Console.WriteLine("You've found: {0}", up.DisplayName);
}
else
{
    Console.WriteLine("ERROR: no one found");
}
0 голосов
/ 28 февраля 2011

Win32 имеет функцию LookupAccountSid, которая делает именно это.

См. PInvoke , как использовать из VB.NET. В вашем случае доменное имя будет именем локального компьютера.

...