Windows Dev. Site

PowerShellでLDAP

LDAPのデータ操作をPowerShellでやってみました。ActiveDirectoryでも同様にできると思いますが、汎用性と導入のしやすさを考えて、OpenLDAPを使いました。

環境 : PowerShell 2.0 / Windows 7 <-> OpenLDAP 2.4.31 / Ubuntu 14.04 LTS

OpenLDAPのインストールは以下のコマンドを実行しただけ。

apt-get install ldap-utils
apt-get install slapd

自動で起動し、使用可能となります。
認証は、cn=admin,dc=nodomain / password
ホスト名は設定していないので、nodomainのままですが、これで使えるようになるのはスゴイ!
テスト前に、データを適当に作成しておきます。(ldapmodifyでもいいですが、ApacheDirectoryStudioを使用)

まずデータの参照から。

$domain = "LDAP://192.168.11.11:389/dc=nodomain"
$auth = [System.DirectoryServices.AuthenticationTypes]::FastBind
$root = New-Object System.DirectoryServices.DirectoryEntry($domain,"cn=admin,dc=nodomain", "password", $auth)
$query = New-Object System.DirectoryServices.DirectorySearcher($root,"(objectclass=*)")
$entries = $query.FindAll()
$entries | %{$_.Properties}
$entries[5] | %{$_.Properties}
$entries[5] | %{$_.Properties["cn"]}
$entries[5] | %{$_.Properties}).PropertyNames

ldap01

更新対象のuser02のデータのみを確認してみます。
ldap02

次に、属性の追加・更新。

$query = New-Object System.DirectoryServices.DirectorySearcher($root,"(&(objectclass=*)(uid=user02))")
$entry = $query.FindOne().GetDirectoryEntry()
$entry.description.Value="Add Value by PS"
$entry.SetInfo()
$entry.givenname.Value="Edit Test"
$entry.SetInfo()

$query.FindOne() | %{$_.Properties}

ldap03

user02にデータが更新されていることが確認できます。

LDAPデータをPowerShellオブジェクトとして扱えるのは便利。