Попытка получить разрешения от принтера, просмотрите имя пользователя, а не sid

У меня есть сценарий для получения разрешений от принтеров на моем сервере принтеров, но на выходе возвращаются SID. Есть ли что-то, что я могу передать, чтобы получить имена пользователей в качестве вывода? Я буду делать это для нескольких принтеров одновременно, поэтому запуск каждого SID через сценарий для их преобразования занимает слишком много времени. Ниже мой скрипт.

(Get-Printer 'brem-pt-8106H' -Full).PermissionSDDL

person Slyons    schedule 08.12.2017    source источник


Ответы (1)


Предположение: пользователь существует в домене

#Requires -Version 5
$SID = [System.Security.Principal.SecurityIdentifier]::new(
    (Get-Printer 'brem-pt-8106H' -Full).PermissionSDDL
)
$User = ($SID.Translate([System.Security.Principal.NTAccount])).Value

Очищено как функция, к которой вы можете подключиться:

Function Get-UsernameFromSddl
{
    [CmdletBinding()]
    [OutputType([String])]
    Param(
        [Parameter(Mandatory,ValueFromPipeline,Position=0)]
        [String]$Sddl
    )

    $Sid = New-Object -TypeName 'System.Security.Principal.SecurityIdentifier' -ArgumentList $Sddl
    $User = $Sid.Translate([System.Security.Principal.NTAccount])

    Return $User.Value
}
person Maximilian Burszley    schedule 08.12.2017