# encoding: ascii
# api: powershell
# title: Get-UserProfileList
# description: Used to get a list of User Profiles from a Target PC.
# version: 0.1
# type: class
# author: Chris Rakowitz
# license: CC0
# x-poshcode-id: 5954
# x-archived: 2015-08-02T00:52:19
# x-published: 2015-07-30T17:13:00
#
#
#  /\    /\    /\    /\    /\    /\    /\    /\    /\    /\    /\    /\  
# /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \ 
#/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \
#|----
#|----@Author:  Chris Rakowitz
#|----@Purpose: Returns a list of User Profiles from a Target Machine.
#|----				Pressing Enter without entering a PC Name or IP will
#|----				generate the information for the local machine.
#|----            Usage:  .\Single-GetUserList.ps1 <PCNAME or IP>
#|----@Date: April 15, 2015
#|----@Version: 1
#|----
#\    /\    /\    /\    /\    /\    /\    /\    /\    /\    /\    /\    /
# \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  /  \  / 
#  \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/    \/  

[cmdletbinding()]
param
(
	[parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
	$ComputerName = $env:computername
)        
$ErrorActionPreference = 'silentlycontinue'	#Skip all the annoying Error Messages

# For each Profile on the PC, extract information
$Profiles = Get-WmiObject -Class Win32_UserProfile -Computer $ComputerName -ea 0
foreach ($Profile in $Profiles)
{
	# Skip NetworkService, LocalService and SystemProfile. No need to process.
	if($Profile.localpath -like 'C:\Windows\*') 
	{
		continue
	}
	else
	{
		$objSID = New-Object System.Security.Principal.SecurityIdentifier($Profile.sid)
		$objuser = $objSID.Translate([System.Security.Principal.NTAccount])

		$OutputObj = New-Object -TypeName PSobject
		$OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.toUpper()
		$OutputObj | Add-Member -MemberType NoteProperty -Name ProfileName -Value $objuser.value
		$OutputObj | Add-Member -MemberType NoteProperty -Name ProfilePath -Value $Profile.localpath
		
		$OutputObj
	}
}
