2017-11-03 5 views
0

​​ライブラリを使用して、アプリケーションのADからユーザーを抽出しています。これは、ユーザーが抽出されているがGet-ADUser -LDAPFilterにLDAPクエリを指定することによって行われますが、最初に私はそれがこのように有効であることを確認するLDAPクエリを検証しますGet-ADUser -LDAPFilterがSystem.Management.Automationライブラリ(C#)で間違った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; 
} 

事は、このメソッドに渡された間違ったLDAPクエリが受け入れられているということです通常のPowerShellではたとえば、このクエリ(&(objectClass=user)(objectCategory=person)(!BLABLABLAObject=*))は機能しますが、もちろん戻りカウントは0になります。かっこがばらついている場合や、Key=Valueの検索が正しく書かれていない場合は、エラーが発生します。

クエリの一部が間違っている場合(括弧と等号を考慮しない)、エラーをスローする方法はありますか?

+1

実際の質問は実際には次のとおりです。「AD LDAPクエリが有効かどうかをどのように検証するのですか?」通常の方法はクエリを実行することであり、サーバーが有効でない場合はエラーが返されます。 –

+0

@Bill_Stewartしかし、私は上記のクエリを実行すると、それは有効です。それは(!BLABLABLAObject = *)でエラーを出してはいけませんか? objectClassとObjectCategoryの名前が混乱しても、クエリはまだ実行されません。 – Enixf

+0

IIRC LDAPクエリは属性が存在するかどうかを検証しません。 –

答えて

0

説明のためにBill_Stewartに感謝します。私はちょうどそれが気づかれない場合のために答えとして上記のコメントに書いた説明を書きます。

誤って書き込まれたLDAPクエリがメソッドパラメータに渡されると、コマンドは(&(objectClass=user objectCategory=person)(!CriticalObject=*のようにエラーをスローします。しかし、指定された属性または値が存在しない場合、たとえばクエリ(&(objectClass=user)(objectCategory=person)(!BLABLABLAObject=*))がクエリを拒否することはありません。単に結果が返されません。

関連する問題