2017-01-18 8 views
1

私は30日以内に期限切れとなる(linuxサーバーからldapsearchを使用して)すべてのアカウントを検索しようとしています。ここでActive DirectoryでのLDAP検索

は、私はADサーバに送信要求です:

のldapsearch -x -h IP -D "[ドメイン]、[ユーザー]" -w [パスワード] -b「DC = [DC]、DC = [DC]」-sサブ "(&(objectCategoryの=人)(objectClassの=ユーザー)(accountExpires> = 1)(accountExpires < = 30))"

私はすべてのアカウントので、任意の名前を得ることはありませんaccountExpiresは0か2^63 -1のいずれかのようです。私は(Windowsサーバ上で)は、Windows PowerShellのからこの要求を起動すると

が、私は正しい答えを得る:

検索-ADAccount -AccountExpiring -TimeSpan 30.00:00:00 |ここで{$ _。ObjectClass -eq 'user'} | FT 名前、ObjectClass -A

私のldapsearchが同じ結果をもたらさない理由を説明できますか?

ありがとうございました!

答えて

0

accountExpires属性の形式は、1601年1月1日(UTC)以降の100ナノ秒間隔です。属性については、these detailsを参照してください。

アカウントの有効期限が切れる日付。この値は、1601年1月1日(UTC)以降の、 の100ナノ秒間隔の数を表します。値0または 0x7FFFFFFFFFFFFFFF(9223372036854775807)は、アカウント が期限切れにならないことを示します。

したがって、正しい値をADに送信するには、その形式にLinux/Unixタイムスタンプをフォーマットする必要があります。次に、LDAPフィルタ

# Get the windows timestamp value for 30 days from now... 
expires_at=$(($(($(date -d "+30 days" +"%s") * 10000000)) + 116444736000000000)) 

(&(objectCategory=person)(objectClass=user)(accountExpires>=1)(accountExpires<=$expires_at)) 
それはのようなもの(貧しいbashのスキルを言い訳...)かもしれません
関連する問題