Этот может быть не идеальным, но он приведет вас на правильный путь. Чтобы получить точного последнего пользователя, пожалуйста, посмотрите этот скрипт. Это даст вам дополнительную информацию о том, как отфильтровать точного последнего пользователя. В приведенном ниже примере я использовал select-object -First 1, который должен быть довольно хорошим индикатором последнего зарегистрированного пользователя. Чтобы получить последнего зарегистрированного пользователя, вам нужно использовать
Get-WmiObject -Class Win32_UserProfile
Чтобы «объединить» информацию Get-ADComputer и Get-WMIObject, я использовал хэш-таблицу.
Если вы запускаете это из учетной записи администратора домена, вы можете убрать часть -credential $ credential. В противном случае оставьте его, и вы сможете запустить его с обычной рабочей станции с установленными инструментами RSAT, чтобы был доступен Get-ADComputer.
Код ниже:
$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)
}
Проверьте форматирование, когда вы его используете. Некоторые из них мне пришлось добавить в качестве символа escape (`), чтобы он поместился в окне скрипта.
Спасибо, Тим.