2017-08-30 26 views
1

DirectorySearcherを使用してActive DirectoryでLDAP要求を行っていますが、無効なフィルタが原因でArgumentExceptionが送出されています。おそらく、Active Directoryの間違った形式のaccountExpiresが原因です。 LDAPを使用して期限切れのアカウントをすべて検索したいのですが、DateTime.NowaccountExpires形式に変換するにはどうすればよいですか?これは私がやったことで、例外が発生します。私はaccountExpires属性取るならば、それは何の問題を作成しません:Active Directory内の無効な検索フィルタ

search.Filter = "(&(objectCategory=person)"+ 
        "(!(objectClass=contact))"+ 
        "(accountExpires>0)"+ 
        "(accountExpires<=129383640000000000)"+ 
        ")"; 

私は本当にaccountExpires形式に日付を変換する方法がわからない、と私はこの問題は、間違った日付フォーマットから来ていると信じています。

アイデア?

+1

:accountExpiresは、Windowsファイルの時間です:あなたはへ/から変換することができます'DateTime.ToFileTimeUtc' /' DateTime.FromFileTimeUtc'を使用したDateTime – Joe

+1

期限切れの日付のアカウントのみをフィルタリングする場合、 'accountExpires'条件がありますか?そうであれば、この条件は機能しますか? : '(!(|(accountExpires = 0x7FFFFFFFFFFFFFFF)(accountExpires = 0)))'(http://ldapwiki.com/wiki/AccountExpiresによる) – Esteban

+0

@Estebanこれは動作しますが、私は必要です(15人のうち1人だけ)。例外はありません –

答えて

1

あなたのフィルタは、否定がない条件として、条件に置かれるべきであるLDAPフィルタ構文に対応していないように思わaccountExpires条件の構文が間違っているように見えます。その条件は、アカウントの有効期限が設定されており、「構文的に」有効であることを条件としています。何を達成したいことは、この日は「決して」ではないではありません有効期限とを持っているアカウントをフィルタリングすることである場合

、次の構文を使用することができます。 (ldapwiki.com/wiki/AccountExpiresによる)

「私は本当にaccountExpires形式に日付を変換する方法がわからない」

(!(|(accountExpires=0x7FFFFFFFFFFFFFFF)(accountExpires=0)))

または

(!(|(accountExpires=9223372036854775807)(accountExpires=0)))

+0

は、 –

1

文字列を渡す方法が不適切であるため、各行の後に二重引用符を閉じてください。

(objectClass!=contact)を記述する必要があります:それはdoesnの(!(objectClass=contact))

search.Filter = "(&(objectCategory=person)"+ 
         "(objectClass!=contact)"+ 
         "(accountExpires>0)"+ 
         "(accountExpires<=129383640000000000)"+ 
         ")"; 
+0

ありがとう、しかし私は実際にそれをすべて1行に入れています。私はちょうどこれを明快にしました:) –

+1

私はそれを知っていました。ロングショットだった! –

+0

accountExpires引数の値が正しいかどうか確認できますか? –

関連する問題