Назад | Перейти на главную страницу

Windows bginfo для отображения даты истечения срока действия A.D?

Есть ли способ в bginfo показывать количество дней до изменения пароля пользователя A.D.?

Например, вы должны сменить пароль через 10 дней.
Пароль A.D необходимо сбрасывать каждые 2 месяца или 60 дней.

BGInfo поддерживает следующее для определения пользовательских переменных:

Первое, что приходит в голову, это сначала определить сценарий входа в систему для пользователя. Что-то, что находит срок годности и затем записывает его в файл на локальном компьютере:

$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = "(sAMAccountName=$($Env:USERNAME))"
$Searcher.SearchRoot = "LDAP://$Env:USERDNSDOMAIN"
$Searcher.SearchScope = 'Subtree'
$ADAccount = $Searcher.FindAll()
$PwdLastSet = [DateTime]::FromFileTime($ADAccount.Properties.pwdlastset[0])
$PwdAge = (New-TimeSpan $PwdLastSet (Get-Date)).TotalDays
$NextPwdChange = 60 - $PwdAge
[Math]::Round($NextPwdChange, 0) | Out-File (Join-Path $Env:USERPROFILE 'pwdage.txt')

Это позволит выяснить, когда в последний раз был изменен пароль пользователя, рассчитать, сколько ему лет, и запишет разницу с 60 дней в текстовый файл в папке профиля пользователя. Поэтому, если я изменил свой пароль 30 дней назад, в текстовом файле было бы записано «30», потому что у меня есть 30 дней до следующей смены пароля.

Затем вы можете заставить BGInfo использовать содержимое этого текстового файла.

Спасибо за отличный сценарий PowerShell. Мне пришлось изменить одну вещь (кодировку с txt с utf на ascii), потому что BGInfo не может отображать файлы UTF TXT.

$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = "(sAMAccountName=$($Env:USERNAME))"
$Searcher.SearchRoot = "LDAP://$Env:USERDNSDOMAIN"
$Searcher.SearchScope = 'Subtree'
$ADAccount = $Searcher.FindAll()
$PwdLastSet = [DateTime]::FromFileTime($ADAccount.Properties.pwdlastset[0])
$PwdAge = (New-TimeSpan $PwdLastSet (Get-Date)).TotalDays
$NextPwdChange = 60 - $PwdAge
[Math]::Round($NextPwdChange, 0) | Out-File -encoding {ascii} (Join-Path $Env:USERPROFILE 'pwdage.txt' )

Я просто хотел выбросить небольшую модификацию предлагаемого скрипта Powershell на основе мсДС-UserPasswordExpiryTimeComputed свойство. Он имеет то преимущество, что автоматически дает вам точную дату / время, когда истечет срок действия пароля данного пользователя, даже с учетом таких вещей, как детализированные политики паролей, если вы их используете. Таким образом, нет необходимости жестко кодировать какие-либо известные значения для существующей политики паролей, и если вы когда-нибудь измените свою политику, вам не нужно обновлять скрипт.

$Searcher = [adsisearcher]"(&(sAMAccountName=$($Env:USERNAME))(sAMAccountType=805306368))"
$Searcher.PropertiesToLoad.Add("msDS-UserPasswordExpiryTimeComputed")
$ADAccount = $Searcher.FindOne()
$PwdExp = [DateTime]::FromFileTime($me.Properties.'msds-userpasswordexpirytimecomputed'[0])
$NextPwdChange = [Math]::Round(($PwdExp - (Get-Date)).TotalDays)
$NextPwdChange | Out-File -encoding {ascii} (Join-Path $Env:USERPROFILE 'pwdage.txt' )

Ваша идея хороша, но сценарий выдает ошибку.

ошибка

Я также сделал новый скрипт, который отображает дату истечения срока в формате ДД: ММ: ГГГГ ЧЧ: ММ. Вам нужно только изменить максимальный срок действия пароля. Если у вас есть пользователи, которые не выходят из системы в конце дня, BGInfo продолжает отображать одни и те же дни до истечения срока действия пароля, что приводит к неверному значению. Мы реализовали следующий скрипт:

$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = "(sAMAccountName=$($Env:USERNAME))" 
$Searcher.SearchRoot = "LDAP://$Env:USERDNSDOMAIN" 
$Searcher.SearchScope = 'Subtree' 
$ADAccount = $Searcher.FindAll() 
$PwdLastSet = [datetime]::FromFileTime($ADAccount.Properties.pwdlastset[0])
$PwdExpire =$PwdLastSet.AddDays(60)
$PwdExpire = $PwdExpire.ToShortDateString() + " " + $PwdExpire.ToShortTimeString()
$PwdAge = (New-TimeSpan $PwdLastSet (Get-Date))
$NextPwdChange = $PwdAge
$PwdExpire | Out-File -encoding {ascii} (Join-Path $Env:USERPROFILE 'pwdage.txt' )

Также важно создать 2 политики (1 для BGInfo и 1 для PS-Script), потому что в противном случае PS-Script будет слишком долго создавать .txt-файл, и BGInfo не сможет отобразить значение на рабочем столе. Кроме того, установите параметр: «Сначала запускать PS-скрипты» в Политике. У нас это сработало.