Windows bginfo 显示 AD 到期日期吗?

Windows bginfo 显示 AD 到期日期吗?

bginfo 中是否有显示 AD 用户密码需要更改之前的天数的方法?

例如,您必须在 10 天内更改密码。AD
密码每 2 个月或 60 天需要重置一次。

答案1

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 使用该文本文件的内容。

答案2

感谢出色的 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' )

答案3

我只是想根据建议的 Powershell 脚本进行一些修改msDS-用户密码到期时间计算属性。它的优点是可以自动为您提供给定用户密码到期的确切日期/时间,即使考虑到细粒度密码策略(如果您正在使用它们)。因此,无需为现有密码策略硬编码任何已知值,如果您更改策略,则无需更新脚本。

$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' )

答案4

你的想法很好,但是脚本运行出错。

错误

我还编写了一个新脚本,以 DD:MM:YYYY HH:MM 格式显示到期日期。您只需修改最大密码使用期限值。如果您的用户在一天结束时没有注销,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-Scripts。这对我们有用。

相关内容