Helpers/SecurityPolicy.psm1

function ConvertTo-NTAccountUser {
    [CmdletBinding()]
    [OutputType([hashtable])]
    Param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string] $Name
    )

    process {
        try {
            # Convert Domaingroups to german
            $language = Get-UICulture
            if ($language.Name -match "de-DE") {
                if ($name -eq "Enterprise Admins") {
                    $name = "Organisations-Admins"
                }
                elseif ($name -eq "Domain Admins") {
                    $name = "Domänen-Admins"
                }
            }

            # Convert friendlynames to SID
            $map = @{
                "Administrators"                      = "S-1-5-32-544"
                "Guests"                              = "S-1-5-32-546"
                "Local account"                       = "S-1-5-113"
                "Local Service"                       = "S-1-5-19"
                "Network Service"                     = "S-1-5-20"
                "NT AUTHORITY\Authenticated Users"    = "S-1-5-11"
                "Remote Desktop Users"                = "S-1-5-32-555"
                "Service"                             = "S-1-5-6"
                "Users"                               = "S-1-5-32-545"
                "NT VIRTUAL MACHINE\Virtual Machines" = "S-1-5-83-0"
            }

            if ($map.ContainsKey($name)) {
                $name = $map[$name]
            }

            # Identity doesn't exist on when Hyper-V isn't installed
            if ($Name -eq "S-1-5-83-0" -and $hyperVStatus -ne "Enabled") {
                return $null
            }

            Write-Verbose "[ConvertTo-NTAccountUser] Converting identity '$Name' to NTAccount"
            if ($Name -match "^(S-[0-9-]{3,})") {
                $sidAccount = [System.Security.Principal.SecurityIdentifier]$Name
            }
            else {
                $sidAccount = ([System.Security.Principal.NTAccount]$Name).Translate([System.Security.Principal.SecurityIdentifier])
            }
            return @{
                Account = $sidAccount.Translate([System.Security.Principal.NTAccount])
                Sid     = $sidAccount.Value
            }
        }
        catch {
            return @{
                Account = "Orphaned Account"
                Sid     = $Name
            }
        }
    }
}