PowerShell: Find computers that a specific user is logged on with the LastLogonDate

Anxo Alonso 1 Reputation point
2023-01-20T21:32:14.29+00:00

Good afternoon,

I would need to run a script that would tell me which computers a particular user was logged into.

I found this script:

#Set variables
$progress = 0

#Get Admin Credentials
Function Get-Login {
Clear-Host
Write-Host "Please provide admin credentials (for example DOMAIN\admin.user and your password)"
$Global:Credential = Get-Credential
}
Get-Login

#Get Username to search for
Function Get-Username {
	Clear-Host
	$Global:Username = Read-Host "Enter username you want to search for"
	if ($Username -eq $null){
		Write-Host "Username cannot be blank, please re-enter username!"
		Get-Username
	}
	$UserCheck = Get-ADUser $Username
	if ($UserCheck -eq $null){
		Write-Host "Invalid username, please verify this is the logon id for the account!"
		Get-Username
	}
}
Get-Username

#Get Computername Prefix for large environments
Function Get-Prefix {
	Clear-Host
	$Global:Prefix = Read-Host "Enter a prefix of Computernames to search on (CXX*) use * as a wildcard or enter * to search on all computers"
	Clear-Host
}
Get-Prefix

#Start search
$computers = Get-ADComputer -Filter {Enabled -eq 'true' -and SamAccountName -like $Prefix}
$CompCount = $Computers.Count
Write-Host "Searching for $Username on $Prefix on $CompCount Computers`n"

#Start main foreach loop, search processes on all computers
foreach ($comp in $computers){
	$Computer = $comp.Name
	$Reply = $null
  	$Reply = test-connection $Computer -count 1 -quiet
  	if($Reply -eq 'True'){
		if($Computer -eq $env:COMPUTERNAME){
			#Get explorer.exe processes without credentials parameter if the query is executed on the localhost
			$proc = gwmi win32_process -ErrorAction SilentlyContinue -computer $Computer -Filter "Name = 'explorer.exe'"
		}
		else{
			#Get explorer.exe processes with credentials for remote hosts
			$proc = gwmi win32_process -ErrorAction SilentlyContinue -Credential $Credential -computer $Computer -Filter "Name = 'explorer.exe'"
		}			
			#If $proc is empty return msg else search collection of processes for username
		if([string]::IsNullOrEmpty($proc)){
			write-host "Failed to check $Computer!"
		}
		else{	
			$progress++			
			ForEach ($p in $proc) {				
				$temp = ($p.GetOwner()).User
				Write-Progress -activity "Working..." -status "Status: $progress of $CompCount Computers checked" -PercentComplete (($progress/$Computers.Count)*100)
				if ($temp -eq $Username){
				write-host "$Username is logged on $Computer"
				}
			}
		}	
	}
}
write-host "Search done!"

The problem is that I would need it to also tell me the LastLogonDate of that user on those computers found by the script.

I tried several times to add some corrections to the script but i could not achieve it.

Could you help me with this task, please?

Thank so much.

Windows for business | Windows Server | User experience | PowerShell
0 comments No comments
{count} votes

7 answers

Sort by: Most helpful
  1. Anxo Alonso 1 Reputation point
    2023-01-23T00:56:29.9166667+00:00

    @Santhi Swaroop Naik Bukke Finally i could solve it with the "query user" line: query user $Username /server:$Computer

    I wouId like to know, to have the perfect script, if, when the "query user" command shows all information: https://ibb.co/jZ6NsF2

    I need that it shows only the LOGON TIME information.

    Is that possible?

    Thank so much.

    0 comments No comments

  2. Anxo Alonso 1 Reputation point
    2023-01-26T15:33:36.6133333+00:00

    I am going to disable the domain administrator account, and i would like to know in what servers this account was used to know the services associated with it.

    This scripts works perfect but the problem is that when i try to look for what servers used the administrator account, the servers which appear are related with the local administrator account, not with the domain administrator account.

    How could I do that the script look for the servers related with the domain administrator account?

    Thank so much.

    0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.