我正在使用 Delphi 10.4并使用TADOConnection和TADOCommand组件访问Active Directory数据。我需要搜索在userAccountControl字段中设置了特定位的用户帐户(即“下次登录时必须更改密码”或“禁用”等)。我有一个工作查询,将搜索userAccountControl具有特定值的用户帐户,但我需要一个仅返回设置了特定位的用户的查询。例如,“select sAMAccountName,userAccountControl from 'LDAP://DC=AD,DC=LOCAL' where userAccountControl ='514'“将返回所有正常禁用的用户,但将错过禁用但在“userAccountControl”中设置了其他位的用户。我希望能够构造一个仅返回在userAccountControl中设置了特定位的用户ID的查询。
我看过Powershell、vbscript等的示例代码,它们应该实现类似的功能:“(&(对象类别=计算机)(用户帐户控件:1. 2. 840. 113556. 1. 4. 803:=8192))"”但它在 Delphi 中不起作用。
有任何建议都非常感谢谢谢
2条答案
按热度按时间1yjd4xko1#
我使用了TADOQuery而不是TADOCommand,添加了一个长度为200的计算TStringField(CalcUserAccountControl),并声明了以下类型和常量:
之后,在TADOQuery的OnCalcFields方法中,只需要检查查询中UserAccountControl字段的位即可。
在计算字段中,我得到了一个字符串,其中包含UserAccountControl的每个标志,如下所示:
记住这一点,您可以使用CalculatedField值来筛选结果集,以便仅显示所需的UserAccountControl标志。
vulvrdjw2#
使用TADOQuery,您可以设置Filtered:= True并添加OnFilterRecord方法,以便仅获取UserAcountControl字段中具有特定位的记录,如以下代码所示: