KD209 Ответов: 1

Помощь в создании скрипта бездействующей учетной записи


Всем Привет,

Я пытаюсь создать скрипт PS, который будет искать рекламный аккаунт со следующими условиями:

Учетная запись активна/включена (учетная запись не отключена)
Срок действия учетной записи истек на 90 дней и более
Пароль учетной записи не установлен на никогда не истекающий срок действия
или
Срок действия пароля учетной записи истек

Я хочу, чтобы результат возвращал следующие значения:

Имя/Отображаемое Имя
Закоксованного
PasswordExpired
LastLogonDate
Pwdage
Отключении

Если есть способ указать исключить конкретное подразделение, это было бы замечательно или явно искать сразу несколько подразделений.

Заранее спасибо за любую помощь.

Что я уже пробовал:

Search-ADAccount -AccountInactive -TimeSpan 90 -UsersOnly -SearchBase "OU=User Accounts,DC=domain,DC=com" |
Where-Object {($_.Enabled -eq $true) -and ($_.PasswordNeverExpires -eq $False)} | Select-object Name, SamAccountName, PasswordExpired, LastLogonDate, Pwdage, PwdLastSet  | export-csv "c:\data\export.csv"


Pwdage &PwdLastSet не перестраивают значения, которые они возвращают "Microsoft.Через ActiveDirectory.Управления.ADPropertyValueCollection"

1 Ответов

Рейтинг:
7

Richard Deeming

Попробуй PasswordLastSet вместо PwdLastSet.

Насколько я могу судить, здесь нет ни одного человека. PwdAge свойство; вам нужно будет рассчитать его из PasswordLastSet собственность.

Что-то вроде этого должно сработать:

Search-ADAccount -AccountInactive -TimeSpan 90 -UsersOnly -SearchBase "OU=User Accounts,DC=domain,DC=com" | 
Get-ADUser -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired, LastLogonDate |
Where-Object {($_.Enabled -eq $true) -and ($_.PasswordNeverExpires -eq $False)} | 
Select-object Name, SamAccountName, PasswordExpired, LastLogonDate, @{ Name = 'PasswordAge';  Expression = { (New-Timespan $_.PasswordLastSet).Days }}, PasswordLastSet  | 
export-csv "c:\data\export.csv"

Active Directory: Get-ADUser Default и расширенные свойства[^]

NB: То Get-ADUser вызов, по-видимому, требуется для загрузки определенных свойств.


KD209

Привет Ричард,

Спасибо за помощь в этом деле. Нет данных возвращаясь для пароль возраст или PasswordLastSet. Существует ли какой-либо другой метод извлечения этих специфических свойств?

Richard Deeming

Есть ли какие-либо данные в этом поле, если вы посмотрите в Active Directory пользователи и компьютеры?

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

KD209

Извините за долгую задержку. Да, есть данные, установленные под атрибутом PwdAge.

Richard Deeming

Это "Пользователь должен изменить пароль при следующем входе в систему" вариант ставили?

KD209

Этот параметр не установлен для большинства пользователей в выходном файле. Все, что я пытаюсь сделать, это выяснить, кто не входил в систему в течение последних 90 дней, и убедиться, что учетные записи, которые заполняются, включены и не имеют срока действия. Возраст пароля просто помогает в качестве ссылки на то, как долго пользователь, возможно, не входил в систему. Если вы знаете какие - либо другие способы добиться этого результата, я открыт.

Richard Deeming

Вы запускаете скрипт из оболочки PS с повышенными правами? Есть предложение по ServerFault[^] что вам, возможно, придется работать от имени администратора, чтобы прочитать этот атрибут.

KD209

Да.. Я запускаю консоль PowerShell ISE в качестве учетной записи администратора домена, которая является единственной учетной записью, имеющей доступ к чтению/записи в AD.

Richard Deeming

Да, но разве она повышена? Вы щелкнули правой кнопкой мыши и выбрали пункт "Запуск от имени администратора"? :)

KD209

Я запускаю его как "Запуск от имени другого пользователя". Я попробую с другой машины, где моя обычная учетная запись является администратором, чтобы она запрашивала учетные данные, когда я запускаю ее с повышенными правами.

KD209

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

Richard Deeming

Хорошо, еще одна последняя попытка, основанная на хите Google от "Experts Exchange":

Search-ADAccount -AccountInactive -TimeSpan 90 -UsersOnly -SearchBase "OU=User Accounts,DC=domain,DC=com" |
Get-ADUser -properties PasswordLastSet, PasswordNeverExpires, PasswordExpired, LastLogonDate |
Where-Object {($_.Enabled -eq $true) -and ($_.PasswordNeverExpires -eq $False)} |
Select-object Name, SamAccountName, PasswordExpired, LastLogonDate, @{ Name = 'PasswordAge';  Expression = { (New-Timespan $_.PasswordLastSet).Days }}, PasswordLastSet |
export-csv "c:\data\export.csv"


Добавление Get-ADUser вызов с дополнительными свойствами, похоже, делает свое дело.

KD209

Это сделало свое дело!!!!! Ты потрясающая! Большое спасибо за ваше время и усилия!