Este pode não ser perfeito, mas vai colocá-lo no caminho certo. Para obter o último usuário exato, consulte este script . Ele fornecerá mais informações sobre como filtrar o último usuário exato. No exemplo abaixo, usei, select-object -Primeiro 1, que deve ser um bom indicador do último usuário logado. Para obter o último usuário logado, você precisa usar
Get-WmiObject -Class Win32_UserProfile
Para 'juntar' as informações Get-ADComputer e Get-WMIObject, usei uma tabela de hash.
Se você estiver executando isso a partir de uma conta de Administrador de domínio, poderá retirar a parte da credencial $ -credential. Caso contrário, deixe-o entrar e você pode executá-lo a partir de uma estação de trabalho normal com as ferramentas RSAT instaladas para que o Get-ADComputer esteja disponível.
Código abaixo:
$computers = Get-ADComputer -Filter { OperatingSystem -NotLike '*Server*' } -Properties OperatingSystem
$credential = Get-Credential -Message "Please enter your administrator username and password"
foreach($computer in $computers) {
$pcinfo = Get-ADComputer $computer.Name -Properties lastlogontimestamp | '
Select-Object @{n="Computer";e={$_.Name}}, '
@{Name="Lastlogon";Expression[DateTime]::FromFileTime($_.lastLogonTimestamp)}}
$lastuserlogoninfo = Get-WmiObject -Class Win32_UserProfile -ComputerName $computer.name -Credential $credential | Select-Object -First 1
$SecIdentifier = New-Object System.Security.Principal.SecurityIdentifier($lastuserlogoninfo.SID)
$username = $SecIdentifier.Translate([System.Security.Principal.NTAccount])
# Create hashtable for properties
$properties = @{'Computer'=$pcinfo.Computer;
'LastLogon'=$pcinfo.Lastlogon;
'User'=$username.value
} #end $properties
write-output (New-Object -Typename PSObject -Property $properties)
}
Verifique a formatação quando usá-lo. Algumas delas eu tive que adicionar um caractere de escape (') para encaixá-lo na janela de script.
Obrigado, Tim.