Как можно определить, под каким пользователем работает компьютер с помощью active directory?

Как с использованием PowerShell написать код для извлечения компьютеров из Active Directory вместе с соответствующими пользователями, подключенными к этим компьютерам, как показано на скриншоте?
Изображение к вопросу
  • 16 января 2024 г. 15:58
Ответы на вопрос 2
Active Directory (AD) не хранит информацию о том, какой пользователь в данный момент вошел на компьютер в режиме реального времени. Для этой цели обычно используют аудит событий входа в систему на самих компьютерах или ведение журнала входов через другие средства мониторинга.

Тем не менее, вы можете использовать PowerShell для получения списка компьютеров из AD и попробовать определить последних пользователей, вошедших в систему, если эта информация была сохранена или отслежена с помощью logon scripts или других аудит систем.

1. Чтобы получить список всех компьютеров из AD, вы можете использовать следующий код PowerShell:

```powershell
Import-Module ActiveDirectory

# Список всех компьютеров
$computers = Get-ADComputer -Filter *

# Вывод информации о каждом компьютере
foreach ($computer in $computers) {
    $lastLogon = Get-ADComputer $computer -Property LastLogonDate
    Write-Host "Computer: $($computer.Name), Last Logon: $($lastLogon.LastLogonDate)"
}
```

2. Если была настроена политика аудита входа в систему на компьютерах домена и сохранилась информация о последнем входе, вы могли бы запросить это через WMI или CIM, но это потребует дополнительных привилегий и ресурсов в сети. Код для выполнения подобного запроса может выглядеть следующим образом:

```powershell
$credential = Get-Credential # Получить учетные данные для выполнения запроса
$computers = Get-ADComputer -Filter * -Property Name

foreach ($computer in $computers) {
    try {
        $lastLogonInfo = Get-WmiObject -Class Win32_NetworkLoginProfile -ComputerName $computer.Name -Credential $credential | 
                         Sort-Object LastLogon -Descending | 
                         Select-Object -First 1
        $username = $lastLogonInfo.Name
        $lastLogonTime = $lastLogonInfo.LastLogon
        Write-Host "Computer: $($computer.Name), User: $username, Last Logon: $lastLogonTime"
    } catch {
        Write-Host "Cannot retrieve logon info for: $($computer.Name)"
    }
}
```

Обратите внимание, что такой скрипт может быть дорогостоящим с точки зрения времени выполнения и использования сетевых ресурсов, поскольку каждый запрос к компьютеру может занять значительное время, и если доступ к компьютеру невозможен (например, он выключен), запрос вернет ошибку.

Написание более сложных и точных скриптов для получения информации о том, кто вошел на компьютер, требует настройки и использования дополнительных инструментов аудита и мониторинга, что выходит за рамки простого запроса к Active Directory.
В AD не хранится информация о сопоставлении компьютера и работающего на нем пользователя. 
Вариантов 2.
1. Обходить скриптом все онлайн машины через WinRM и дергать пользователей, формировать список.
2. Добавить через GPO на все нужные машины startup скрипт, который при логоне на них пользователей будет писать нужные вам данные в AD - в любой из пустых Extanded Attributes, а затем просто через get-aduser или get-adcomputer доставать эти данные.
Похожие вопросы