Function/GetUserProfile.ps1
#$Computername=$env:COMPUTERNAME #$Win32_UserProfile=Get-WmiObject -Class Win32_UserProfile -Namespace root\cimv2 -ComputerName $Computername function GetUserProfile { [CmdletBinding()] param( [switch]$OnlyLoaded ) try { if ($win32_userprofile -eq $null) { Write-Error "Variable Win32_UserProfile is null" -ErrorAction Stop } $AllUserProfiles=@() [string[]]$ExcludeSid="S-1-5-18","S-1-5-19","S-1-5-20" if ($credential) { $LocalAccount=Get-WmiObject -Class Win32_UserAccount -ComputerName $Computername -Filter "LocalAccount=$true" -Credential $credential } else { $LocalAccount=Get-WmiObject -Class Win32_UserAccount -ComputerName $Computername -Filter "LocalAccount=$true" } if ($PSBoundParameters["OnlyLoaded"].IsPresent) { $Win32UserProfiles=$Win32_UserProfile | Where-Object {!($ExcludeSid -eq $_.sid) -and $_.loaded} if ($Win32UserProfiles -eq $null) { Write-Error "User profile is not loaded" } } else { $Win32UserProfiles=$Win32_UserProfile | Where-Object {!($ExcludeSid -eq $_.sid)} } function GetProfileStatus { Param($ProfileStatus) switch($ProfileStatus) { 1 { "Temporary" } 2 { "Roaming" } 4 { "Mandatory" } 8 { "Corrupted" } default { "LOCAL" } } } $Win32UserProfiles | Select-Object -Property * | foreach { $Sid=$_.sid $LastUseTime=$null $User=$null $ProfileDirectory=$null $LocalPath=$_.localpath $ProfileStatus=GetProfileStatus -ProfileStatus $_.status $objSID = New-Object System.Security.Principal.SecurityIdentifier($Sid) try { $objUser = $objSID.Translate([System.Security.Principal.NTAccount]) $User=$objUser.Value Write-Verbose "$Computername Translate sid $sid succesfully" } catch { Write-Verbose "$Computername Unknown sid $sid" $User=($LocalAccount | Where-Object {$_.sid -eq $Sid}).caption if ($User -eq $null) { $User="Unknown" } } $_ | Add-Member -MemberType NoteProperty -Name User -Value $User $_ | Add-Member -MemberType NoteProperty -Name ProfileStatus -Value $ProfileStatus $_ } | Select-Object -Property User,SID,LocalPath,Loaded,ProfileStatus | foreach {$AllUserProfiles+=$_} $AllUserProfiles } catch { Write-Error $_ } } |