Helpers/SecurityPolicy.psm1

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

    process {
        try {
            # Identity doesn't exist on when Hyper-V isn't installed
            if ($Name -eq "NT VIRTUAL MACHINE\Virtual Machines" -and
                (Get-WindowsOptionalFeature -Online -FeatureName "Microsoft-Hyper-V").State -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
            }
        }
    }
}