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

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

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

相关内容