Вопрос или проблема
Когда вы смотрите на ключ реестра 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:
-
Откройте редактор реестра:
- Нажмите
Win + R
, введитеregedit
и нажмитеEnter
.
- Нажмите
-
Перейдите к следующему ключу:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
-
Идентификация SID:
- Внутри ключа ProfileList вы увидите несколько подключей, каждый из которых представляет собой SID.
- Чтобы определить, какому пользователю принадлежит конкретный SID, вы можете выбрать каждый из подключей и просмотреть значение
ProfileImagePath
, которое указывает на путь к папке профиля пользователя.
2. Использование командной строки
Еще один способ получения SID учетной записи — использование командной строки:
-
Откройте командную строку:
- Нажмите
Win + R
, введитеcmd
и нажмитеEnter
.
- Нажмите
-
Введите следующую команду:
wmic useraccount where name="USERNAME" get sid
Замените
USERNAME
на имя учетной записи, для которой вы хотите получить SID. Эта команда вернет SID для указанной учетной записи.
3. Использование PowerShell
PowerShell также предлагает мощные возможности для работы с SID:
-
Откройте PowerShell:
- Нажмите
Win + X
и выберите "Windows 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
Замените
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, позволяя вам управлять доступом и правами пользователей в системе.