【发布时间】:2018-04-10 06:05:46
【问题描述】:
我可以获得单个用户的有效“msDS-UserPasswordExpiryTimeComputed”属性:
(([DateTime]::FromFileTime((Get-ADUser $UserName -Properties "msDS-UserPasswordExpiryTimeComputed")."msDS-UserPasswordExpiryTimeComputed")))
但我无法定位一组特定用户。我较大的脚本旨在从特定 OU 的帐户中提取各种 AD 用户属性并导出到 csv。除“PasswordExpiry”对象外,所有属性均按预期填充。
以下示例为每个用户返回一个虚假的“PasswordExpiry”日期“12/31/1600”。 "C:\UserList.txt" 每行包含一个 sAMAccountNames。
$UserList=Get-Content "C:\UserList.txt"
ForEach ($UserName in $UserList) {Get-ADUser "$UserName" -Properties * |
Select-Object sAMAccountName,whenCreated, `
@{Name="lastLogon";Expression={[DateTime]::FromFileTime($_.lastLogon)}}, `
@{Name="pwdLastSet";Expression={[DateTime]::FromFileTime($_.pwdLastSet)}}, `
@{Name="PasswordExpiry";Expression={[DateTime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}, `
cannotChangePassword,passwordNeverExpires, `
@{Name="GroupMember";Expression={($_ | Select -ExpandProperty MemberOf) | Where {$_ -Like "*Desired.Group*"}}} |
Export-Csv -Path "C:\UserInfo.csv" -Append -NoTypeInformation}
如果我想查询所有 AD 用户,这可行:
Get-ADUser -Filter * –Properties sAMAccountName,"msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property sAMAccountName,@{Name="PasswordExpiry";Expression={[DateTime]::FromFileTime($_.“msDS-UserPasswordExpiryTimeComputed”)}}
但如果我将 [-SearchBase "OU=Users,DC=Domain,DC=local"] 参数添加到 Get-ADUser,我会得到“PasswordExpiry”的空输出。我想我可以尝试通过一些后期处理来解析整个输出。似乎触摸的次数超出了我应该触摸的次数。
我知道我可以根据“pwdLastSet”属性计算过期时间。但我想提取实际值,因为年龄政策可能是未知的。任何帮助表示赞赏。
【问题讨论】:
标签: powershell foreach select-object