在AD中启用查询但未过期的用户

我如何查询AD给我所有已启用但未过期的用户? 我使用PowerShell的QuestAD工具,但它没有“-NotExpired”选项或与Get-QADUser等效。

如果可能的话,我宁愿使用PowerShell解决scheme,以便我可以更轻松地处理数据。

Get-QADUser -Enabled -SizeLimit 0 | where {-not $_.AccountIsExpired} 

没关系 – 似乎对象本身有一个布尔值“AccountIsExpired”标志,我可以testing。

Get-QADUser -Enabled -AccountNeverExpires -SizeLimit 0

您应该能够使用ADO ADSI查询来完成此操作:

 (&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))(|(accountExpires=9223372036854775807)(accountExpires=0))) 

将给所有不失效的非残疾账户。

 (&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(accountExpires<=127818648000000000)) 

将为您提供在2006年1月16日之前过期的所有非禁用用户对象

以下是如何执行ADO ADSI查询的示例:

 $strbase = "<LDAP://dc=ms,dc=com>" $strFilter = "(&(objectcategory=user)(useraccountcontrol=66048))" $strAttributes = "sAMAccountName,displayname" $strScope = "subtree" $strQuery = "$strBase;$strFilter;$strAttributes;$strScope" $objConnection = New-Object -comObject "ADODB.Connection" $objCommand = New-Object -comObject "ADODB.Command" $objConnection.Open("Provider=ADsDSOObject;") $objCommand.ActiveConnection = $objConnection $objCommand.CommandText = $strQuery $objRecordSet = $objCommand.Execute() 

而根据这个post …你会得到更快的答案,然后你会用一个cmdlet。 另外这里是ADO ADSI的一个很好的指南,它引用了VBscript的例子,但是你可以很容易地把这些概念转换回Powershell。