在bginfo中是否有显示AD用户密码需要更改之前的天数?
例如,您必须在10天内更改您的密码。
AD密码应每2个月或60天重置一次。
BGInfo支持以下定义自定义variables:
首先想到的是首先为用户定义一个login脚本。 一些发现到期date,然后将其写入到本地计算机上的文件:
$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天的差异写入用户configuration文件夹中的文本文件中。 所以,如果我30天前更改了密码,它会在文本文件中写入“30”,因为我有30天的时间才能更改密码。
然后,您可以让BGInfo使用该文本文件的内容。
感谢伟大的PowerShell脚本。 有一件事,我不得不改变(编码从TXF 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' )
我只是想根据msDS-UserPasswordExpiryTimeComputed属性对build议的Powershell脚本进行一些修改。 如果您使用密码策略,即使考虑到细粒度的密码策略,也可以自动为您提供给定用户的密码到期的确切date/时间。 因此,不需要对现有密码策略的任何已知值进行硬编码,并且如果更改了策略,则无需更新脚本。
$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' )
你的想法很好,但脚本会出错。
错误
我还创build了一个新的脚本,以DD:MM:YYYY HH:MM格式显示到期date。 您只需修改最大密码年龄值。 如果您的用户在一天结束时没有注销,BGInfo会一直显示相同的date,直到密码过期导致错误的值。 我们实现了以下脚本:
$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' )
创build2个策略(1个用于BGInfo,1个用于PS-Script)也很重要,因为否则PS-Script花费的时间太长,无法创build.txt文件,而BGInfo无法在桌面上显示值。 此外设置设置:在策略中首先运行PS脚本。 这对我们有效。