LDAP のフィルタをカスタマイズするスクリプト


Outlook 2007 の LDAP アドレス帳で LDAP サーバーを検索する際、既定では以下のような属性が検索の対象となります。

  • 電子メール アドレス (mail 属性)
  • 共通名 (cn 属性)
  • 姓 (sn 属性)
  • 名 (givenName 属性)
  • 表示名 (displayName 属性) – LDAP サーバーとして Active Director の DC を指定した場合のみ

しかし、場合によってはこれ以外の属性も検索対象としたいということもあるでしょう。http://technet.microsoft.com/ja-jp/library/cc179232.aspx にカスタム フィルタの設定方法が記載されているのですが、PRF ファイルを使って行う必要があり、すでに設定済みの LDAP アカウントを一度削除する必要があります。

そこで、レジストリにカスタム フィルタの文字列を直接書き込むためのスクリプトを作成しました。このスクリプトの CHANGE_SERVERFILTER_STRING を適宜変更して拡張子を .vbs として保存し、スクリプトを実行することで、指定した LDAP サーバーを参照する LDAP アカウントにカスタム フィルタが設定されます。下記の例では mail、cn、sn、givenName のほかに customProp という属性を検索の対象として追加しています。

' ここをトリプルクリックでマクロ全体を選択できます。
'
Option Explicit
' LDAP フィルタを設定するサーバー名
Const CHANGE_SERVER = "ldapserver"
' LDAP フィルタの文字列
Const FILTER_STRING = "(&(mail=*)(|(mail=%s*)(cn=%s*)(sn=%s*)(givenName=%s*)(customProp=%s*)))"
Const HKEY_CURRENT_USER = &H80000001
Const MAPI_PROFILE_KEY = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"
Const ServerName = "001e6600"
Const CheckNames = "001e6624"

Dim stdRegProv
Dim strDefaultProfile
Dim strProfileKey
Dim arrSubKeys
Dim strSubKey
Dim strServer

' WMI の StdRegProv クラスを取得
Set stdRegProv = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
' 既定の MAPI プロファイル名を取得
stdRegProv.GetStringValue HKEY_CURRENT_USER, MAPI_PROFILE_KEY, "DefaultProfile", strDefaultProfile
' 既定の MAPI プロファイルのキーを生成
strProfileKey = MAPI_PROFILE_KEY & "\" & strDefaultProfile
' 既定の MAPI プロファイルのサブキーを取得
stdRegProv.EnumKey HKEY_CURRENT_USER, strProfileKey, arrSubKeys
' サブキーのすべてについて処理
For Each strSubKey In arrSubkeys
    ' LDAP のサーバー名を取得
    If stdRegProv.GetStringValue(HKEY_CURRENT_USER, strProfileKey & "\" & strSubKey, ServerName, strServer) = 0 Then
        ' LDAP サーバー名が設定されていたらフィルタを設定すべき LDAP サーバーの名前かどうかを確認
        If strServer = CHANGE_SERVER Then
            ' 設定すべきサーバーだったらフィルタの設定をレジストリに追加
            stdRegProv.SetStringValue HKEY_CURRENT_USER, strProfileKey & "\" & strSubKey, CheckNames, FILTER_STRING
            Exit For
        End If
    End If
Next

Set stdRegProv = Nothing

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中