Прошу прощения, если это похоже на дубликат. На самом деле тот же вопрос был задан на 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)
?
Когда я завершаю проекты автоматизации или провожу курсы обучения автоматизации, меня всегда спрашивают, почему я не использую Export-Csv
. Microsoft утверждает, что Export-Csv
совпадает с ConvertTo-Csv
, за исключением того, что он сохраняет вывод в файл. Хотя это утверждение буквально верно, оно не заменяет проверенный временем код:
$Objects | ConvertTo-Csv -NoTypeInformation > .\usagecase.csv
Export-Csv
имеет проблемы с нестандартными форматированными объектами. Это особенно хорошо видно в командлетах из модуля ActiveDirectory
. Это случай левой / правой руки. Командлеты AD не возвращают объекты с использованием стандартного форматирования, и вы столкнетесь с подобными странными проблемами, используя их.
Причина, по которой проверенный метод работает в этом случае, заключается в том, что Powershell будет форматировать данные одинаково каждый раз для вывод на консоль. Ключ - это оператор перенаправления >
, который сообщает Powershell о необходимости сохранения вывода консоли в файл, а не на экран.