PowerShell: obtenga el último inicio de sesión de dominio con Get-ADUserLastLogon
La función cubierta en esta publicación de blog es parte de mi herramienta de la Sección de Servicios de Dominio de Active Directory, que se publicó en 2018. Después de un tiempo, decidí crear una función explícita para cada elemento de mi herramienta para aquellos que no están interesados en usar mi herramienta que ofrece mucho más que consultar el último inicio de sesión de los usuarios del dominio. Y aquí está el elemento 16 de mi herramienta: Consulta del último inicio de sesión del usuario de AD.
Get-ADUserLastLogon
Get-ADUserLastLogon obtiene la marca de tiempo del último inicio de sesión de un usuario de Active Directory. Cada controlador de dominio se consulta por separado para calcular el último inicio de sesión a partir de todos los resultados de todos los controladores de dominio.
La función incluye solo un parámetro. Proporcione el nombre de inicio de sesión del usuario (SamAccountName). También verá qué controlador de dominio informa el inicio de sesión más reciente del usuario.
Get-ADUserLastLogon -UserLogonName patrick
Si se introduce un nombre de usuario que no existe, la función finaliza.
Si no hay informes de inicio de sesión de un usuario, la función mostrará el siguiente mensaje.
La función también funcionará en PowerShell 7 y superiores.
Si te gusta, echa un vistazo a mi sección de descargas para descargar el archivo *.ps1 o copia el código a continuación.
El código
function Get-ADUserLastLogon {
# .SYNOPSIS
# Get-ADUserLastLogon gets the last logon timestamp of an Active Directory user.
# .DESCRIPTION
# Each domain controller is queried separately to calculate the last logon from all results of all DCs.
# .PARAMETER
# UserLogonName
# Provide the user logon name (samaccountname) of the user.
# .EXAMPLE
# Get-ADUserLastLogon -UserLogonName s.stollane
# .NOTES
# Author: Patrick Gruenauer
# Web:
# https://sid-500.com
[CmdletBinding()]
param
(
[Parameter(Mandatory=$true)]
$UserLogonName
)
$resultlogon=@()
Import-Module ActiveDirectory
$ds=dsquery user -samid $UserLogonName
If ($ds) {
$getdc=(Get-ADDomainController -Filter *).Name
foreach ($dc in $getdc) {
Try {
$user=Get-ADUser $UserLogonName -Server $dc -Properties lastlogon -ErrorAction Stop
$resultlogon+=New-Object -TypeName PSObject -Property ([ordered]@{
'User' = $user.Name
'DC' = $dc
'LastLogon' = [datetime]::FromFileTime($user.'lastLogon')
})
}
Catch {
''
Write-Warning "No reports from $($dc)!"
}
}
$resultlogon | Where-Object {$_.lastlogon -NotLike '*1601*'} | Sort-Object LastLogon -Descending | Select-Object -First 1 | Format-Table -AutoSize
If (($resultlogon | Where-Object {$_.lastlogon -NotLike '*1601*'}) -EQ $null)
{
''
Write-Warning "No reports for user $($user.name). Possible reason: No first login."
}
}
else
{throw 'User not found. Check entered username.'}
}
Cómo usarlo
Copie el código anterior en PowerShell ISE (ise.exe) o en un editor de su elección y ejecute el código. Luego escribe el comando y diviértete con él.
Si desea que la función esté disponible permanentemente, de modo que esté disponible cada vez que inicie PowerShell, debe crear una carpeta en C:\Program Files\WindowsPowerShell\Modules. Nombra la carpeta Get-ADUserLastLogon. Luego guarde el código como archivo .psm1 en esa carpeta. La siguiente captura de pantalla te ayudará.




