我正在使用System.Management.Automation
库从我的应用程序中的AD中提取用户。通过在Get-ADUser -LDAPFilter
中指定LDAP查询来完成提取哪些用户,但首先我验证LDAP查询以确保其有效,如下所示:
public static bool ValidLDAPQuery(string ldapQuery)
{
try
{
using (var powerShell = PowerShell.Create())
{
var adUsersList = powerShell
.AddCommand("Get-ADUser")
.AddParameter("LDAPFilter", ldapQuery)
.Invoke();
}
}
catch (Exception)
{
return false;
}
return true;
}
事实是,在普通的PowerShell中接受传递给此方法的错误LDAP查询。例如,此查询(&(objectClass=user)(objectCategory=person)(!BLABLABLAObject=*))
可以使用,但当然返回计数只是0
。如果括号不均匀或Key=Value
搜索未正确写入,则仅抛出错误。
如果查询的任何部分出错(没有考虑括号和等号),有没有办法让它抛出错误?
答案 0 :(得分:0)
感谢Bill_Stewart的澄清。我只是在上面的评论中写下他作为答案的澄清,以防它被忽视。
因此,当将错误编写的LDAP查询传递给方法参数(例如(&(objectClass=user objectCategory=person)(!CriticalObject=*
)时,该命令将引发错误。但是,如果指定的属性或值不存在,它将不会拒绝查询,例如(&(objectClass=user)(objectCategory=person)(!BLABLABLAObject=*))
,它只会产生不结果。