Как узнать SID учетной записи пользователя Windows?

Вопрос или проблема

Когда вы смотрите на ключ реестра HKEY_USERS, каждый подпункт (представляющий настройки каждого пользователя) выглядит как S-1-5-18, что, я полагаю, называется SID.

Как мне узнать, какой SID соответствует какой учетной записи пользователя?

Как связать имя пользователя с идентификатором безопасности (SID)

Откройте редактор реестра и перейдите по адресу:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Под ключом ProfileList вы увидите SID. Выбирая каждый из них по отдельности, вы можете посмотреть значение и увидеть, какое имя пользователя связано с этим SID.

Также можно использовать PsGetSid.

Я использую следующий VB-скрипт, а не устанавливаю дополнительные утилиты. Не могу взять на себя заслуги за отдельные его компоненты, только за их комбинацию:

Lookup_SID.vbs

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

UserName = UserInput( "Введите имя пользователя:", "" )
Domain = UserInput( "Введите домен / имя ПК:", "")

Set objAccount = objWMIService.Get _
("Win32_UserAccount.Name="" & UserName & "",Domain='" & Domain & "'")
Call UserInput( "SID для " & Domain & "\" & UserName & " равен: ", objAccount.SID )

Function UserInput( myPrompt, default_text )
' Эта функция запрашивает ввод от пользователя.
' Когда скрипт выполняется в CSCRIPT.EXE, используется StdIn,
' в противном случае используется функция VBScript InputBox( ).
' myPrompt - текст, используемый для запроса ввода от пользователя.
' Функция возвращает введенное значение либо через StdIn, либо в InputBox( ).
' Написано Робом ван дер Вуде
' http://www.robvanderwoude.com
    ' Проверка, выполняется ли скрипт в CSCRIPT.EXE
    If UCase( Right( WScript.FullName, 12 ) ) = "\CSCRIPT.EXE" Then
        ' Если да, используйте StdIn и StdOut
        WScript.StdOut.Write myPrompt & " "
        UserInput = WScript.StdIn.ReadLine
    Else
        ' Если нет, используйте InputBox( )
        UserInput = InputBox( myPrompt,, default_text )
    End If
End Function

Откройте окно cmd и введите следующую команду

wmic useraccount where name="USERID" get sid

где USERID – это имя пользователя, SID которого вы ищете.

Посмотрите на ключи в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Powershell, который я нашел где-то в интернете (не имею оригинального источника):

$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxx-xxxxxx") 
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount]) 
$objUser.Value

Также эта ссылка может быть полезной:
Подробности о SID

Вот двухстрочный код, который извлечет имена пользователей и SID из реестра. Скопируйте/вставьте в cmd.exe:

SET "_reg_profile_path=HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion\profilelist"
FOR /f "tokens=7 delims=\" %G IN ('reg query "%_reg_profile_path%" ^| findstr /I "%_reg_profile_path%"' ) DO @reg query "%_reg_profile_path%\%G" | FOR /f "tokens=3 delims=\" %X IN ('findstr /I ProfileImagePath') DO @echo %X,%G

Ответ или решение

Как узнать SID учетной записи пользователя в Windows

Security Identifier (SID) – это уникальный идентификатор, который используется в операционных системах Windows для идентификации учетных записей пользователей и групп. Каждый раз, когда создается новая учетная запись, Windows генерирует соответствующий SID, который используется для управления правами доступа. Если вы столкнулись с необходимостью узнать SID конкретной учетной записи пользователя Windows, существуют несколько способов это сделать.

1. Использование редактора реестра

Один из наиболее прямых способов узнать SID – это обратиться к реестру Windows:

  1. Откройте редактор реестра:

    • Нажмите Win + R, введите regedit и нажмите Enter.
  2. Перейдите к следующему ключу:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
  3. Идентификация SID:

    • Внутри ключа ProfileList вы увидите несколько подключей, каждый из которых представляет собой SID.
    • Чтобы определить, какому пользователю принадлежит конкретный SID, вы можете выбрать каждый из подключей и просмотреть значение ProfileImagePath, которое указывает на путь к папке профиля пользователя.

2. Использование командной строки

Еще один способ получения SID учетной записи — использование командной строки:

  1. Откройте командную строку:

    • Нажмите Win + R, введите cmd и нажмите Enter.
  2. Введите следующую команду:

    wmic useraccount where name="USERNAME" get sid

    Замените USERNAME на имя учетной записи, для которой вы хотите получить SID. Эта команда вернет SID для указанной учетной записи.

3. Использование PowerShell

PowerShell также предлагает мощные возможности для работы с SID:

  1. Откройте PowerShell:

    • Нажмите Win + X и выберите "Windows PowerShell".
  2. Введите следующий код:

    $objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxx-xxxxxx") 
    $objUser = $objSID.Translate( [System.Security.Principal.NTAccount]) 
    $objUser.Value

    Замените S-1-5-21-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxx-xxxxxx на конкретный SID, чтобы получить соответствующее имя учетной записи.

4. Использование VBScript

Для тех, кто предпочитает скрипты, вы можете воспользоваться следующим VBScript для получения SID по имени пользователя:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

UserName = UserInput("Enter the user name:", "")
Domain = UserInput("Enter the domain / PC name:", "")

Set objAccount = objWMIService.Get("Win32_UserAccount.Name=""" & UserName & """,Domain='" & Domain & "'")
Call UserInput("The SID for " & Domain & "\" & UserName & " is: ", objAccount.SID)

Function UserInput(myPrompt, default_text)
    If UCase(Right(WScript.FullName, 12)) = "\CSCRIPT.EXE" Then
        WScript.StdOut.Write myPrompt & " "
        UserInput = WScript.StdIn.ReadLine
    Else
        UserInput = InputBox(myPrompt,, default_text)
    End If
End Function

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

Заключение

Получение SID учетной записи пользователя в Windows может производиться различными способами, каждый из которых имеет свои плюсы. Вы можете использовать редактор реестра для визуального поиска, командную строку и PowerShell для автоматизированного получения или VBScript для написания собственного агрегатора. Независимо от метода, вы сможете эффективно найти нужный SID, позволяя вам управлять доступом и правами пользователей в системе.

Оцените материал
Добавить комментарий

Капча загружается...