Contents of this directory is archived and no longer updated.

Примечание: данный пост перепечатан в связи с закрытием бложиков на 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. Вроде бы очень простенькие операции, но порой очень нужные.


Share this article:

Comments:

Comments are closed.