|
現: 2022-01-17 (月) 09:29:29 yuji  |
| + | * OutlookでLDAPサーバーのアドレス帳を使用する [#wd431846] |
| + | LDAP(Lightweight Directory Access Protocol)は,ユーザーやコンピュータの情報を集中管理する「ディレクトリサービス」。''[[詳しくはこちらのページ>https://ja.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol]]''を参照する。~ |
| | | |
| + | MicrosoftのActive DirectoryもLDAPを使用しているようだ。 |
| + | |
| + | LDAPではいろいろな情報をDBとして管理・サービスできるが,メールアドレスもその一つ。~ |
| + | OutlookやThunderbirdなんかのメールクライアントだと,メールアドレス検索にLDAPサバーを利用できる。 |
| + | |
| + | ** OutlookでLDAPアドレス帳を使用する [#t8637e47] |
| + | Outlookでアドレス帳としてLDAPを参照できるようにするには,以下のようにする。~ |
| + | - Outlookのファイル>アカウント設定>アドレス帳をクリック~ |
| + | - 新規をクリックする~ |
| + | インターネットディレクトリサービスにマークを付けて次へをクリックする。 |
| + | - サーバー名に,LDAPサーバーを登録する~ |
| + | - 詳細設定ボタンをクリックする~ |
| + | - 検索タブをクリックする~ |
| + | 検索ベースの''ユーザー設定''を選択して,''ou=xxxxx,dc=yyyyy,dc=zzzzz''のようにLDAPサーバーのDBを設定する。~ |
| + | - 次へ,完了ボタンで設定終了。 |
| + | |
| + | これで,LDAPサーバーのメールアドレス帳がOutlookで参照できるようになった。~ |
| + | Outlookのアドレス帳を開いてその他のアドレス帳で選択すれば,メールアドレス等を検索できる。しかし, |
| + | 検索する場合は,''高度な検索''(なにが高度なのかわからないが・・・)をクリックして検索する必要がある。~ |
| + | |
| + | ** OutlookでのLDAP使用時のデフォルト検索 [#f54d3c9e] |
| + | OutlookでLDAPアドレス帳を使用する場合に,上記のようにちょっと難があります。それは,検索する際にデフォルト検索が一切出来ない,また検索対象がその他のフィールドしか選べないっていう難です。~ |
| + | |
| + | 高度な検索でも,部署の検索はなぜか出来ない・・・~ |
| + | Thundirbirdではこんな難は無いのだが,Outlookには困ったものです。 |
| + | |
| + | ** デフォルト検索が出来るようにする [#t68d38ce] |
| + | そのままでもまあ使えるが,上記の難の対策を行うために,以下の内容で''outlooksearch.reg''ファイルを作成する。~ |
| + | 作成したoutlooksearch.regを右クリック>結合で,レジストリに追加する。(Outlook2016用です。Outlook365でも動作した。)~ |
| + | ''outlooksearch.reg''~ |
| + | #code(text,nonumber){{ |
| + | Windows Registry Editor Version 5.00 |
| + | |
| + | [HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\LDAP] |
| + | "DisableVLVBrowsing"=dword:00000001 |
| + | "NoDisplayNameSearch"=dword:00000001 |
| + | }} |
| + | |
| + | これで,LDAPアドレス帳を開いた時にデフォルト検索BOXで検索できるようになる。~ |
| + | ただし,アドレス帳を開いた時からの一覧表示は出来ない。これはLDAPサーバー側で仮想一覧表示(Virtual List View)をサポートしていないためみたい。 |
| + | |
| + | ** デフォルトでの検索項目と検索項目の追加 [#e304891a] |
| + | 上記で検索出来るようにはなったが,Outlookでは検索対象のLDAP属性は以下が対象になっている。~ |
| + | - 電子メール アドレス(mail属性)~ |
| + | - 共通名(cn属性)~ |
| + | - 姓(sn属性)~ |
| + | - 名(givenName属性)~ |
| + | - 表示名(displayName属性)~ |
| + | LDAPサーバーが,Active DirectorのDCを指定した場合のみ。~ |
| + | |
| + | しかし,これ以外の属性も検索対象にしたい。 |
| + | Microsoftの http://technet.microsoft.com/ja-jp/library/cc179232.aspx で,検索対象の属性を追加する(カスタムフィルター)方法が記載されているが,この方法ではLDAPの構築をし直す必要がある。(PRFファイルを使って設定する。) |
| + | |
| + | そこで,Windowsのレジストリを編集して検索対象を追加する方法で対応してみる。 |
| + | |
| + | LDAPサーバーを利用している場合に,検索対象に部署(ou)と役職(title)と会社(company)をWindowsのレジストリに追加するVBスクリプトプログラムを作成した。~ |
| + | 部署では,文字列が含まれていれば検索に引っかかるようにしている。~ |
| + | ''customfilter.vbs''~ |
| + | #code(vb,nonumber){{ |
| + | ' OutlookでLDAP検索用のデフォルト検索用カスタムフィルターをWindowsレジストリに設定する |
| + | ' ou(部署)とtitle(役職)を追加 |
| + | ' displayName(表示名),ou(部署),title(役職)は検索文字列が含まれていればヒットする |
| + | Option Explicit |
| + | |
| + | ' LDAPフィルタを設定するサーバー名 |
| + | Const CHANGE_SERVER = "xxxxxx.yyyyyy.zzzzzz" |
| + | |
| + | ' LDAPフィルタの文字列 |
| + | Const FILTER_STRING = "(&(mail=*)(|(mail=%s*)(cn=%s*)(sn=%s*)(givenName=%s*)(displayName=*%s*)(ou=*%s*)(title=*%s*)(company=*%s*)))" |
| + | |
| + | Const HKEY_CURRENT_USER = &H80000001 |
| + | ' for Outlook2016 |
| + | Const MAPI_PROFILE_KEY = "Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook" |
| + | ' for outlook2010 |
| + | ' Const MAPI_PROFILE_KEY = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook" |
| + | 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") |
| + | |
| + | ' 既定のOutlookプロファイル名を取得 |
| + | stdRegProv.GetStringValue HKEY_CURRENT_USER, MAPI_PROFILE_KEY, "DefaultProfile", strDefaultProfile |
| + | |
| + | ' 既定のOutlookプロファイルのキーを生成 |
| + | strProfileKey = MAPI_PROFILE_KEY & "\" & strDefaultProfile |
| + | |
| + | ' 既定のOutlookプロファイルのサブキーを取得 |
| + | 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 |
| + | }} |
| + | |
| + | これで,OutlookでLDAPアドレス帳を開いた時にデフォルト検索で検索できるように出来た。 |