Хроника интереснейших задач на PowerShell продолжается. Возникла необходимость собрать данные о доменных пользователях, которые когда-либо входили на конкретный удалённый хост и импортировать эти данные в таблицу.
В итоговой таблице должны быть отображены SID, логин и ФИО пользователя. Само собой, что за основу обращения к профилям как раз и берётся SID пользователя. К примеру, вот в этой ветке реестра упоминаются только SID’ы:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Итак, обращаемся к профилям через командлет Get-WmiObject (можно обратиться к псевдониму и использовать gwmi) и запихиваем вывод в переменную $users.
Дальше пускаем в ход цикл и получаем все нужные нам данные.
В итоге, у меня получилась вот такая конструкция:
## Шапка скрипта ##
[System.Console]::Title = "Узнать всех пользователей хоста"
## Импорт модуля ActiveDirectory ##
Import-Module activedirectory
## Блок переменных ##
$hostname = Read-Host "Введите имя удалённого хоста"
$users = gwmi -ComputerName $hostname win32_userprofile | select -ExpandProperty sid
## Получить список пользователей ##
foreach ($user in $users) {
try { Get-ADUser $user | Select SID, Name, SamAccountName | ConvertTo-Csv -NoTypeInformation -Delimiter "," | % {$_ -replace '"',''} | select-object -skip 1 | Out-File users.csv -Append }
catch { }
}
Кстати, скрипт проигнорирует SID’ы локальных пользователей и сохранит в csv только данные доменных.