Как узнать SID пользователя по имени и наоборот
Получить SID локального пользователя
Чтобы получить SID локальной учетной записи на данной машине, можно воспользоваться утилитой wmic, обращающейся к WMI хранилищу. Для локального пользователя test_user команда будет такой:
1 |
wmic useraccount where name='test_user' get sid |
В этом примере SID пользователя — S-1-5-21-1175651296-1316126944-203051354-1005
Если нужно узнать SID текущего пользователя, выполните такую команду:
1 |
wmic useraccount where name='%username%' get sid |
На PowerShell скрипт, выдающий тот же результат можно реализовать с помощью двух классов SecurityIdentifier и NTAccount.
1 2 3 |
$objUser = New-Object System.Security.Principal.NTAccount("LOCAL_USER_NAME") $strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier]) $strSID.Value |
Получить SID доменного пользователя
Узнать SID текущей доменной учетной записи можно командой:
1 |
whoami /user |
Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell.
1 |
Get-ADUser -Identity 'jjsmith' | select SID |
Если модуль AD для PowerShell отсутствует, через Powershell можно запросить данные из домена так:
1 2 3 |
$objUser = New-Object System.Security.Principal.NTAccount("corp.wintpro.ru","jjsmith") $strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier]) $strSID.Value |
Эта же команда в одну строку:
1 |
(new-object security.principal.ntaccount “jjsmith").translate([security.principal.securityidentifier]) |
Определить имя пользователя по SID
Чтобы узнать имени учетной записи пользователя по SID (обратная процедура), можно воспользоваться одной из следующих команд:
1 |
wmic useraccount where sid='S-1-3-12-12452343106-3544442455-30354867-1434' get name |
На PowerShell при помощи модуля AD для Powershell:
1 |
Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116 |
Или так:
1 2 3 |
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-2470456651-3958312488-29145117-23345716") $objUser = $objSID.Translate( [System.Security.Principal.NTAccount]) $objUser.Value |