Получить список последних вошедших пользователей из OU в Active Directory

Вопрос или проблема

Я пытаюсь получить список последних вошедших пользователей, используя PowerShell.
Я попробовал следующее, но это не показывает пользователя:

$ou = "OU=MyOU,DC=test,DC=com"


# Получить компьютеры из указанного OU
$computers = Get-ADComputer -Filter * -SearchBase $ou -Properties Name, DistinguishedName

foreach ($computer in $computers) {
    $lastLoggedOnUser = $null
    try {
        $lastLoggedOnUser = (Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $computer.Name -ErrorAction Stop).UserName
    } catch {
        $lastLoggedOnUser = "Не удалось получить"
    }
    
    [PSCustomObject]@{
        ComputerName = $computer.Name
        OU = ($computer.DistinguishedName -split ',',2)[1]
        LastLoggedOnUser = $lastLoggedOnUser
    }
}

Ответ или решение

Для получения списка последних вошедших пользователей из конкретного организационного подразделения (OU) в Active Directory (AD) с использованием PowerShell, необходимо учесть некоторые аспекты, чтобы обеспечить корректность и полноту информации. Ваш текущий скрипт позволяет извлечь имя пользователя, но он может не полностью соответствовать вашим требованиям. Мы рассмотрим улучшенную версию кода и добавим дополнительные объяснения.

Задача

  1. Получить список компьютеров из указанного OU.
  2. Для каждого компьютера извлечь данные о последнем вошедшем пользователе.
  3. Вернуть результаты в удобочитаемом формате.

Усовершенствованный скрипт PowerShell

# Определяем OU
$ou = "OU=MyOU,DC=test,DC=com"

# Получаем компьютеры из указанного OU
$computers = Get-ADComputer -Filter * -SearchBase $ou -Properties Name, DistinguishedName

# Создаем список для хранения результатов
$results = @()

foreach ($computer in $computers) {
    $lastLoggedOnUser = $null
    $lastLogonTime = $null

    try {
        # Получаем информацию о системе
        $cimInstance = Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $computer.Name -ErrorAction Stop
        $lastLoggedOnUser = $cimInstance.UserName

        # Получаем последний вход пользователя
        $lastLogonTime = Get-ADUser -Identity $lastLoggedOnUser -Properties LastLogonTimestamp | Select-Object -ExpandProperty LastLogonTimestamp
        if ($lastLogonTime) {
            # Преобразуем значение времени в читаемый формат
            $lastLogonTime = [DateTime]::FromFileTime($lastLogonTime).ToLocalTime()
        } else {
            $lastLogonTime = "Информация отсутствует"
        }
    } catch {
        $lastLoggedOnUser = "Не удалось получить"
        $lastLogonTime = "Не удалось получить"
    }

    # Добавляем результаты в массив
    $results += [PSCustomObject]@{
        ComputerName      = $computer.Name
        OU                 = ($computer.DistinguishedName -split ',',2)[1]
        LastLoggedOnUser   = $lastLoggedOnUser
        LastLogonTime      = $lastLogonTime
    }
}

# Выводим результаты
$results | Format-Table -AutoSize

Описание кода

  1. Определение OU: Переменная $ou указывает на интересующее вас организационное подразделение.
  2. Получение компьютеров: Используется Get-ADComputer для извлечения компьютеров, находящихся в указанном OU.
  3. Цикл обработки: Для каждого компьютера:
    • Get-CimInstance извлекает данные о системе, включая имя последнего вошедшего пользователя.
    • Get-ADUser используется для получения LastLogonTimestamp, который и показывает время последнего входа пользователя в систему.
    • Обработка ошибок через блок try/catch, чтобы избежать остановки скрипта при возникновении проблем с соединением или недостаточными правами.
  4. Форматирование вывода: Результаты собираются в объект PSCustomObject, который затем выводится в виде таблицы.

Заключение

Данный подход обеспечивает вам необходимую информацию о последних входах пользователей по каждому компьютеру в определенном OU. Убедитесь, что у вас есть соответствующие права доступа для выполнения этих команд, так как доступ к данным пользователей может быть ограничен. Использование PowerShell для автоматизации такой задачи значительно упростит управление Active Directory в вашей организации.

Оцените материал
Добавить комментарий

Капча загружается...