Этот может быть не идеальным, но он приведет вас на правильный путь. Чтобы получить точного последнего пользователя, пожалуйста, посмотрите этот скрипт . Это даст вам дополнительную информацию о том, как отфильтровать точного последнего пользователя. В приведенном ниже примере я использовал 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 @}, ` @} $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 (`), чтобы он поместился в окне скрипта.
Спасибо, Тим.