月別アーカイブ: 2009年5月

VBAでActive Directoryのサブドメインを含む全ドメインを列挙する方法


ややマニアックな話題だが、ExcelのVBA(Visual Basic For Applications)を使って、社内のActive Directoryに接続し、サブドメインも含む全ドメイン名を列挙し、各ドメイン内のOUやグループを列挙する方法が分かったので、備忘のために記事にしておく。
Const ADS_SCOPE_SUBTREE = 2
Dim oConn As Variant
Dim oCommand As Variant
‘ ActiveDirectory接続用ADODBオブジェクト生成
Set oConn = CreateObject(“ADODB.Connection”)
Set oCommand = CreateObject(“ADODB.Command”)
oConn.Provider = “ADsDSOObject”
oConn.Open
Set oCommand.ActiveConnection = oConn
‘ Active Directoryのグローバルカタログに全ドメイン名を問い合わせ
oCommand.CommandText = _
    “SELECT distinguishedName from ” & _
    “‘GC://DC=inabata,DC=com’ WHERE objectClass=’domain'”
oCommand.Properties(“Page Size”) = 1000
oCommand.Properties(“Timeout”) = 300
oCommand.Properties(“Searchscope”) = ADS_SCOPE_SUBTREE
oCommand.Properties(“Cache Results”) = False
Set oRes = oCommand.Execute
If oRes.BOF Then Exit Sub
Do Until oRes.EOF
    sDomain = oRes.Fields(“distinguishedName”).Value
    oRes.MoveNext
Loop
ここまでで自社のActive Directory管轄下にあるサブドメインも含む全てのドメイン名を取得できる。
distinguishedName形式で取得しているので「DC=japan,DC=hogehoge,DC=com」といった形式になる。
次に、各ドメイン内のOUやグループ、コンピュータを列挙するのだが、僕はてっきり、各ドメインのドメインコントローラを先ず調べて、そのドメインコントローラに対してLDAPクエリーを投げる必要があると思っていた。
例えば、ドメインコントローラーのサーバ名が「DCServer01」だとすると、その配下の全OUを列挙するには、次のように問い合わせる必要があると思っていた。
oCommand.CommandText = _
    “SELECT distinguishedName from ” & _
    “‘LDAP://DCServer01/DC=japan,DC=hogehoge,DC=com’ ” & _
    “WHERE objectClass=’organizationalUnit'”
CommandTextに渡す問い合わせ文字列の中身を抜き出せば次のようになる。
SELECT distinguishedName
FROM ‘LDAP://DCServer01/DC=japan,DC=hogehoge,DC=com’
WHERE objectClass=’organizationalUnit’
ところが、このサーバ名の代わりに、ドット表記のドメイン名が使えることが分かったのだ。つまり次のような感じである。
SELECT distinguishedName
FROM ‘LDAP://japan.hogehoge.com/DC=japan,DC=hogehoge,DC=com’
WHERE objectClass=’organizationalUnit’
ドット表記のドメイン名なら、最初に取得した「DC=japan,DC=hogehoge,DC=com」形式のドメイン名から簡単に変換できるので、例えば下記のような関数として定義しておけばよい。
Function ToDottedName(ByVal sBuf As String) As String
    sBuf = Replace(sBuf, “DC=”, “”)
    sBuf = Replace(sBuf, “,”, “.”)
    ToDottedName = sBuf
End Function
後は、sDomainという引数で”DC=japan,DC=hogehoge,DC=com”形式のドメイン名を渡すようなサブルーチンを書けば、当該ドメイン内の全OUを列挙するなら、
oCommand.CommandText = _
    “SELECT distinguishedName from ” & _
    “‘LDAP://” & ToDottedName(sDomain) & “/” & sDomain & “‘ ” & _
    “WHERE objectClass=’organizationalUnit'”
当該ドメイン内の全Groupを列挙するなら
oCommand.CommandText = _
    “SELECT distinguishedName from ” & _
    “‘LDAP://” & ToDottedName(sDomain) & “/” & sDomain & “‘ ” & _
    “WHERE objectClass=’Group'”
当該ドメインの特定OU内の全コンピュータを列挙するなら、
oCommand.CommandText = _
    “SELECT distinguishedName from ” & _
    “‘LDAP://” & ToDottedName(sDomain) & “/OU=特定のOU名称’ ” & _
    “WHERE objectClass=’computer'”
などとなる。

20年前の僕が語りかけてくる

20年前の僕が、今の僕に語りかけてくる。
「20年生きてどうだった?
何かが変わったと思うかい?
僕は谷山浩子の1stアルバムばかり聴いている。
君は柴田淳ばかり聴いているようだ。
僕は毎日ひとりギターを弾きながら、昔の歌を歌っている。
そのおかげでなんとか生きていけている。
君は平日でもカラオケに行って、最近の歌を歌っている。
そのおかげでなんとか生きていけているようだ。
何も変わってないじゃないか。
20年も生きてきたのに。
それって、君が20年後も、同じように歌を歌うことで生きていけることを意味しているだろうか。
違うんじゃないかな。
僕は学生だから何の責任もない。
部屋に引きこもって、吉祥寺あたりを昼間からぶらぶら歩き回って、1年くらい留年したって、大したことはない。
でも君は部屋に引きこもるわけにはいかないよね。
君の責任はこれからどんどん重くなっていくからさ。
きっとどんどん生きづらくなっていくよ。
それでも歌があれば生きていけるだろうか?」
こんな大事な質問に、そうかんたんに答えるわけにはいかない。
そうかんたんに、答えるわけにはいかないんだ。

くすりのネット販売規制は官僚の「暴走」?

新聞によれば、インターネットで医薬品を販売している会社2社が、医薬品のネット販売を禁止する厚労省の省令を、憲法違反だとして、東京地検に取り消しを求める訴えを起こしたらしい。
これは面白くなってきた。
今回のネット販売規制は、法律ではなく、ただの「省令」らしい。そして、今回の「省令」のもとになっている法律は、2月に改正された薬事法らしい。
毎日新聞によれば、改正薬事法の条文にネット販売の禁止条文がないのに、省令でネット販売を禁止するのが、今回の省令の最大の問題らしい。
国民に選挙で選ばれた国会議員が、審議して成立させた法律に書いていないことを、お役人たちが自由裁量で「省令」として定められるのだとしたら、これこそ民主主義の重大な危機ではないか。
そういう意味でも、今回の医薬品のネット販売規制は、重大な問題をはらんでいると言えそうだ。

宮台真司『日本の難点』(幻冬舎新書)を読んでいる

社会学者・宮台真司の書いた『日本の難点』(幻冬舎新書)を読んでいる。

縦横無尽にさまざまな問題を、あざやかに、わかりやすい言葉で整理していく手法には、相変わらず感心させられる。さまざまな社会問題を考えるにあたって、とても参考になる観点を与えてくれる。
ただ、読んでいて非常に虚しくなる。
というのは、この本に書かれていることを実践できる立場にある人たちは、宮台真司のいう公共心を持つ少数のエリートだけだ。
僕は東京大学で、宮台真司がこの本の中で引用しているジャック・デリダなどの現代思想を学んだおかげで、この本の内容を、おそらく正しく理解できている。
しかし、僕のサラリーマンとしての日常生活は、実に下らない問題に忙殺されるだけの毎日だ。
サラリーマンとして長く働けば働くほど、仕事の内容のほとんどが、社内・社外のいろいろな人たちの「わがまま」を調整することになる。
社内のそれぞれの部署は自分の利益を主張し、社外の関係者も自分の利益を主張する。
それらがお互いに衝突するのを、どうやって調整して、妥協点を見つけるか。中堅サラリーマンの仕事をひとことで表現すれば、単なる「利害調整」である。
そういう下らない利害調整に、毎日、胃が痛くなるような思いをして、神経をすり減らして、疲れ切って家に帰ってきて。そういう毎日の繰り返しだ。
サラリーマンの利害調整の仕事には、公共性のかけらもない。
また、僕にしかない能力を発揮する機会もない。
宮台真司の書いていることはもっともだし、僕自身、ほぼ完全に同意する。
しかし、僕のように、社内外の利害調整で疲弊しているサラリーマンには、宮台真司の提唱するような、社会をより良くするための活動に参加する力は残っていない。
宮台真司は、こういう本を新書として出版することで、いったい誰に語りかけているのだろうか?
こういう本を読んで、たしかに勉強にはなるけれども、実に下らない利害調整に忙殺されるサラリーマンとしては、読んでいて、ただただ虚しい。

剣道2段を40年も詐称していた森田健作知事

森田健作・千葉県知事が40年以上も、正式な免状なしに「剣道2段」を名乗り、今後も名乗るつもりだと会見したらしい。
それより、自民党支部長でありながら、無所属で千葉県知事に当選した件はどうなったんだ?
野党が調査特別委員会設定を求めたのに、自民党が否決したのでは?
自民党が否決したということは、まさに森田健作知事が無所属ではなく、自民党だという、何よりの証拠じゃないか!
これが詐称でなくて何だというのか。
免状もないのに「剣道2段」を詐称してもぜんぜん平気。
自民党支部長でありながら「無所属」を詐称してもぜんぜん平気。
こんな人物を知事に選んだ、千葉県民の民度の低さも、とほほな感じだ。