我如何查询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。