Экспорт даты последнего входа в систему для неактивных пользователей через PowerShell

У меня есть команда, которая будет экспортировать список пользователей, которые вошли в систему в течение 12 месяцев, но я изо всех сил пытаюсь экспортировать дату и время последнего входа в систему.

Команда выглядит следующим образом:

Search-ADAccount –AccountInActive -UsersOnly –TimeSpan 365:00:00:00 –ResultPageSize 2000 –ResultSetSize $null |?{$_.Enabled –eq $True} | Select-Object Name, SamAccountName, DistinguishedName, lastLogon| Export-CSV “C:\Users\Me\Desktop\InactiveUsers.CSV” –NoTypeInformation

Но lastLogon показывает пробел в файле CSV.

Я новичок в PowerShell. Я понимаю, что команду можно сделать намного проще.

Любая помощь в этом очень ценится.

Вам нужно будет передать результат в Get-ADUser -Properties, чтобы получить дату последнего входа в систему.

Santiago Squarzon 03.02.2023 16:14

Что-то вроде: $date= (get-date).AddDays(-90) Get-ADUser-Filter {LastLogonDate-lt $date} -Property Enabled|Where-Object {$_.Enabled -like «true»} |SelectName, SamAccountName,DistinguishedName,lastLogon|Export‌​t-CSV «C:\Users\Me\Desktop\InactiveUsers.CSV» -NoTypeInformation

S.Mahmood 03.02.2023 16:49

Проблема с lastlogontimestamp заключается в том, что этот атрибут не реплицируется в реальном времени, возможна задержка в 14 дней. Если вы хотите получить точные результаты, вам следует запросить все ваши контроллеры домена и вместо этого использовать lastlogon, вы можете использовать этот ответ в качестве примера stackoverflow.com/a/68750430/15339544

Santiago Squarzon 03.02.2023 16:57

Я буду честен с вами, я не понимаю этот код в URL-адресе, я могу понять, что он делает, как вы это объяснили, но как я могу настроить его для этого скрипта для пользователей, которые не вошли в систему, чтобы узнать больше чем год и отображать имена пользователей, имена, адреса электронной почты и дату последнего входа в систему, но опрашивать все контроллеры домена? (Извините, я новичок в этой области)

S.Mahmood 03.02.2023 18:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Search-ADAccount не имеет возможности извлекать другие атрибуты из объектов AD, кроме атрибутов по умолчанию, вы можете использовать Get-ADUser со сложным фильтром для запроса пользователей, которые не входили в систему в течение прошлого года. Одним из вариантов является запрос пользовательского атрибута lastLogonTimeStamp , однако при этом вы рискуете получить неточные результаты, поскольку этот атрибут не реплицируется в реальном времени. Чтобы получить точную информацию, необходимо запросить атрибут пользователя lastLogon, но, поскольку этот атрибут не реплицируется в домене, необходимо запросить все контроллеры домена, чтобы получить последний вход в систему от пользователя.

Для получения дополнительной информации по этой теме, пожалуйста, ознакомьтесь с отличной статьей TechNet: Понимание атрибутов учетной записи AD — LastLogon, LastLogonTimeStamp и LastLogonDate.

$dateLimit = [datetime]::UtcNow.AddYears(-1).ToFileTimeUtc()

$AllDCs = Get-ADDomainController -Filter *
$logons = @{}

$params = @{
    LDAPFilter = -join @(
        "(&"                                                 # AND, all conditions must be met
            "(!samAccountName=krbtgt)"                       # exclude krbtgt from this query
            "(!samAccountName=Guest)"                        # exclude Guest from this query
            "(userAccountControl:1.2.840.113556.1.4.803:=2)" # object is Disabled
            "(lastLogon<=$dateLimit)"                        # lastLogon is below the limit
        ")"                                                  # close AND clause
    )
    Properties = 'lastLogon'
}

foreach($DC in $AllDCs) {
    $params['Server'] = $DC

    foreach($user in Get-ADUser @params) {
        # this condition is always met on first loop iteration due to ldap filtering condition
        if ($logons[$user.samAccountName].LastLogon -lt $user.LastLogon) {
            $logons[$user.samAccountName] = $user
        }
    }
}

$logons.Values | ForEach-Object {
    [PSCustomObject]@{
        Name              = $_.Name
        SamAccountName    = $_.SamAccountName
        DistinguishedName = $_.DistinguishedName
        lastLogon         = [datetime]::FromFileTimeUtc($_.lastLogon).ToString('u')
    }
} | Export-CSV "C:\Users\Me\Desktop\InactiveUsers.CSV" -NoTypeInformation

Последний запрос, если бы я хотел изменить это для пользователей, которые не входили в систему в течение 6 месяцев, как бы это изменить здесь: $dateLimit = [datetime]::UtcNow.AddYears(-1).ToFileTimeUtc()

S.Mahmood 03.02.2023 19:17

@S.Mahmood вместо этого вы можете использовать [datetime]::UtcNow.AddMonths(-6).ToFileTimeUtc() :)

Santiago Squarzon 03.02.2023 19:19

Чувак, ты спасатель жизни. Всегда полезно, как никогда спасибо еще раз.

S.Mahmood 06.02.2023 19:46

Я хочу получить адреса электронной почты EmailAddress = $_.EmailAddress попробовал этот код, и он не работает?

S.Mahmood 07.02.2023 15:57

Другие вопросы по теме