我如何查询 AD 以提供所有已启用但未过期的用户?我将 QuestAD 工具与 PowerShell 结合使用,但它没有“-NotExpired”选项或与 Get-QADUser 等效的选项。
如果可能的话,我更喜欢使用 PowerShell 解决方案,以便于我更轻松地处理数据。
答案1
Get-QADUser -Enabled -SizeLimit 0 | where {-not $_.AccountIsExpired}
答案2
没关系 - 似乎对象本身有一个我可以测试的布尔“AccountIsExpired”标志。
答案3
获取 QADUser -Enabled -AccountNeverExpires -SizeLimit 0
答案4
您应该能够使用 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()
根据这个邮政... 这种方式比使用 cmdlet 更快,您可以得到答案。此外,这里还有一个很好的指南数据交换接口,它引用了 VBscript 示例,但您可以轻松地将概念转换回 Powershell。