Примечание: данный пост перепечатан в связи с закрытием бложиков на spaces.live.com, как имеющий какую-то ценность для автора и/или читателей.
При написании скриптов, которые автоматически назначают права NTFS или права доступа к реестру (ну и в других ситуациях) иногда требуется конвертация имени пользователя в его SID и наоборот, у нас есть SID пользователя и нужно узнать его имя в базе SAM или базе Active Directory. Для этих преобразований используется 2 класса - SecurityIdentifier и класс NTAccount. Делается каждая операция в 2 строчки:
$NameToSID = new-object security.principal.ntaccount "User Name" $NameToSID.translate([security.principal.securityidentifier])
или ванлайнер:
(new-object security.principal.ntaccount "User Name").translate([security.principal.securityidentifier])
Здесь я в первой строке передал в класс NTAccount имя пользователя (выделено жирным) и второй строкой перевёл (дословно Translate) это имя в SID. Разумеется, что если данного имени не будет обнаружено в базе учётных записей, то скрипт вернёт ошибку. Обратная операция выполняется точно так же, только меняются местами классы:
$SIDToName = new-object security.principal.securityidentifier "S-1-5-32-544" $SIDToName.translate([security.principal.ntaccount])
или вайнлайнер:
(new-object security.principal.securityidentifier "S-1-5-32-544").translate([security.principal.ntaccount])
Здесь я указал один из well-known SID'ов, т.к. реальный SID грозился не влезть в одну строчку. Зато вы можете выполнить эти 2 строчки и узнать, какому аккаунту приналдежит данный SID. Вроде бы очень простенькие операции, но порой очень нужные.
Comments: