Get-CurrentUser.ps1


<#PSScriptInfo
 
.VERSION 1.0.0
 
.GUID 1a23fc08-2fdb-4d18-a1b2-53e531a4530c
 
.AUTHOR Saw-Friendship
 
.COMPANYNAME
 
.COPYRIGHT
 
.TAGS
Username SID MemberOf CurrentUser Security.Principal.WindowsIdentity
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 
 
#>


<#
 
.DESCRIPTION
 Get Username, SID and MemberOf for CurrentUser from [Security.Principal.WindowsIdentity]
 
.EXAMPLE
Get-CurrentUser
 
Name : Domain\saw-friendship
SID : S-1-5-21-2825421524-4144269381-457877587-20115
AuthenticationType : Kerberos
ImpersonationLevel : None
IsAuthenticated : True
IsGuest : False
IsSystem : False
IsAnonymous : False
 
 
.EXAMPLE
Get-CurrentUser -IncludeMemberOf
 
Name : Domain\saw-friendship
SID : S-1-5-21-2825421524-4144269381-457877587-20115
AuthenticationType : Kerberos
ImpersonationLevel : None
IsAuthenticated : True
IsGuest : False
IsSystem : False
IsAnonymous : False
MemberOf : {@{Name=Domain\Domain Users; SID=S-1-5-21-2825421524-4144269381-457877587-513}, @{Name=���; SID=S-1-1-0}, @{Name=PC1\docker-users; SID=S-1-5-21-2113150-1802504319-1219586930-1006}, @{Name=PC1\Ssh Users; SID=S-1-5-21-2113150-1802504319-1219586930-1005}...}
 
 
 
#>
 

param (
    [switch]$IncludeMemberOf
)

$GetCurrentWindowsIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
$CurrentUser =  $GetCurrentWindowsIdentity | Select-Object -Property @(
    @{'Name' = 'Name'; 'Expression' = {$_.Name}},
    @{'Name' = 'SID'; 'Expression' = {$_.User}},
    @{'Name' = 'AuthenticationType'; 'Expression' = {$_.AuthenticationType}},
    @{'Name' = 'ImpersonationLevel'; 'Expression' = {$_.ImpersonationLevel}},
    @{'Name' = 'IsAuthenticated'; 'Expression' = {$_.IsAuthenticated}},
    @{'Name' = 'IsGuest'; 'Expression' = {$_.IsGuest}},
    @{'Name' = 'IsSystem'; 'Expression' = {$_.IsSystem}},
    @{'Name' = 'IsAnonymous'; 'Expression' = {$_.IsAnonymous}}
    
)

if (! $IncludeMemberOf) {
    $CurrentUser
} else {
    $CurrentUser | Select-Object -Property @(
        '*',
        @{'Name' = 'MemberOf'; 'Expression' = {
            $GetCurrentWindowsIdentity.Groups | Select-Object -Property @(
                @{'Name' = 'Name'; 'Expression' = {$(New-Object System.Security.Principal.SecurityIdentifier ($_)).Translate( [System.Security.Principal.NTAccount] )}},
                @{'Name' = 'SID'; 'Expression' = {$_.Value}}
            )
        }}
    ) | Sort-Object -Property SID,Name
}