Получить пользователей AD, которые не входили в систему в течение последних x дней и являются членами определенной группы?

Прошу прощения, если это похоже на дубликат. На самом деле тот же вопрос был задан на http://serverfault.com/questions/783399/get-a-list-of-users-who-are-domain-admins-and-have-not-logged-in -the-last-30-day Я немного читаю о том, как работает AD, и одно из упражнений предлагает мне получить список пользователей, которые являются администраторами домена и не входили в систему в течение последних 90 дней.

user360071 предложил следующий сценарий:

Import-Module ActiveDirectory
$age = 30
$When = ((Get-Date).AddDays(-$age)).Date
$DomainAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
Get-ADUser -Property LastLogonDate -Filter { ((memberof -eq $DomainAdminsDn) -and (LastLogonDate -lt $When))} | Select SamAccountName,UserPrincipalName,LastLogonDate | Export-CSV $env:USERPROFILE\Desktop\users.csv -NoTypeInformation

или

Import-Module ActiveDirectory
$age = Read-Host "Accounts that have not been logged into in the last how many days should be shown?" 
$When = ((Get-Date).AddDays(-$age)).Date
$DomainAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
Get-ADUser -Property LastLogonDate -Filter { ((memberof -eq $DomainAdminsDn) -and (LastLogonDate -lt $When))} | Select SamAccountName,UserPrincipalName,LastLogonDate | Export-CSV $env:USERPROFILE\Desktop\users.csv -NoTypeInformation

Однако у меня такая же проблема, как и у другого пользователя, разместившего этот вопрос. Файл CSV пуст.

Я выполнил приведенный ниже код, чтобы убедиться, что в моей среде есть DA:

 $DomainAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
 Get-ADUser -Property LastLogonDate -Filter {(memberof -eq $DomainAdminsDn)}

Вот возвращенные результаты:

DistinguishedName : CN=James Conrad,OU=Sales,OU=London,DC=lab,DC=local
Enabled           : True
GivenName         : James
LastLogonDate     :
Name              : James Conrad
ObjectClass       : user
ObjectGUID        : e990ab92-7034-4be2-8064-ff7a3e31e8b6
SamAccountName    : jconrad
SID               : S-1-5-21-2556462985-1643875289-4278096718-1118
Surname           : Conrad
UserPrincipalName : jconrad@lab.local

DistinguishedName : CN=Ed Meadows,OU=Branch Office 1,OU=London,DC=lab,DC=local
Enabled           : True
GivenName         : Ed
LastLogonDate     : 11/06/2016 7:37:21 PM
Name              : Ed Meadows
ObjectClass       : user
ObjectGUID        : 0a70ef30-ffb7-40dd-b0ef-ef94a394e66a
SamAccountName    : emeadows
SID               : S-1-5-21-2556462985-1643875289-4278096718-1123
Surname           : Meadows
UserPrincipalName : emeadows@lab.local

Как видите, я должен, по крайней мере, получить Джеймса Конрада в моем CSV-файле, поскольку он никогда не входил в систему in и он администратор домена. Есть идеи, почему это происходит? Он пуст, потому что Джеймс Конрад никогда не входил в систему, а Эд Медоуз не соответствует критериям (- lt -90) ?

-1
задан 12 June 2016 в 11:12
1 ответ

Когда я завершаю проекты автоматизации или провожу курсы обучения автоматизации, меня всегда спрашивают, почему я не использую Export-Csv . Microsoft утверждает, что Export-Csv совпадает с ConvertTo-Csv , за исключением того, что он сохраняет вывод в файл. Хотя это утверждение буквально верно, оно не заменяет проверенный временем код:

$Objects | ConvertTo-Csv -NoTypeInformation > .\usagecase.csv

Export-Csv имеет проблемы с нестандартными форматированными объектами. Это особенно хорошо видно в командлетах из модуля ActiveDirectory . Это случай левой / правой руки. Командлеты AD не возвращают объекты с использованием стандартного форматирования, и вы столкнетесь с подобными странными проблемами, используя их.

Причина, по которой проверенный метод работает в этом случае, заключается в том, что Powershell будет форматировать данные одинаково каждый раз для вывод на консоль. Ключ - это оператор перенаправления > , который сообщает Powershell о необходимости сохранения вывода консоли в файл, а не на экран.

1
ответ дан 5 December 2019 в 19:48

Теги

Похожие вопросы