Private/Test-NameIsWellKnownSid.ps1
Function Test-NameIsWellKnownSid { <# .SYNOPSIS Checks if a given name corresponds to a well-known SID and returns the SID. .DESCRIPTION This function takes a name as input, processes it to remove common prefixes, and checks if it corresponds to a well-known SID. If found, it returns the SID as a [System.Security.Principal.SecurityIdentifier] object. .PARAMETER Name The name to check against the well-known SIDs. .EXAMPLE PS> Test-NameIsWellKnownSid -Name 'NT AUTHORITY\SYSTEM' .INPUTS [String] Name .OUTPUTS [System.Security.Principal.SecurityIdentifier] #> [CmdletBinding(SupportsShouldProcess = $false, ConfirmImpact = 'low')] [OutputType([System.Security.Principal.SecurityIdentifier])] Param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'Specify the name to check against Well-Known SIDs.', Position = 0)] [ValidateNotNullOrEmpty()] [string] $Name ) Begin { $txt = ($Variables.HeaderDelegation -f (Get-Date).ToShortDateString(), $MyInvocation.Mycommand, (Get-FunctionDisplay -HashTable $PsBoundParameters -Verbose:$False) ) Write-Verbose -Message $txt ############################## # Module imports ############################## # Variables Definition $Identity = $null $Name = ($PSBoundParameters['Name']).ToLower() $cleanedName = $Name -replace '^(built-in\\|builtin\\|built in\\|nt authority\\|ntauthority\\|ntservice\\|nt service\\)', '' } #end Begin Process { Try { # Check if the cleaned name is in the Well-Known SID dictionary if ($Variables.WellKnownSIDs.Values.Contains($cleanedName)) { # Find the corresponding SID $sid = $Variables.WellKnownSIDs.keys.where{ $Variables.WellKnownSIDs[$_] -eq $cleanedName } if ($sid) { # Create the SecurityIdentifier object $Identity = [System.Security.Principal.SecurityIdentifier]::new($sid) Write-Verbose -Message (' Matched SID: {0} For: {1}' -f $Identity.Value, $cleanName ) # Convert to SecurityIdentifier object [System.Security.Principal.SecurityIdentifier]$Identity = [System.Security.Principal.SecurityIdentifier]::New($sid) } else { Write-Error -Message (' Error creating SecurityIdentifier object for {0}.' -f $cleanName ) #Get-ErrorDetail -ErrorRecord $_ $Identity = $null } } else { Write-Verbose -Message (' The name {0} does not correspond to a well-known SID or is not recognized.' -f $cleanedName ) $Identity = $null } #end If-Else } catch { Write-Error -Message ('Error found when translating WellKnownSid for {0}.' -f $cleanedName) $Identity = $null #Get-ErrorDetail -ErrorRecord $_ } #end Try-Catch } #end Process End { $txt = ($Variables.FooterDelegation -f $MyInvocation.InvocationName, 'testing Well-Known SID (Private Function).' ) Write-Verbose -Message $txt return $Identity.Value } #end End } |