AD環境で社員ID等から社員情報を取得するHTAツール

社員IDから社員情報を解決する際に、AD(ActiveDirectory)から取ってくれば楽じゃんとおもいました。CUIなら簡単に作れるが、GUIで作るとなると結構厄介だ。しかしHTAという強い味方がWindowsにはいるのだ。
HTAはテキストベースなので、コンパイラがいらない。カスタマイズもテキストエディタさえあれば可能だ。

以下のコードのうち、「LDAPName」さえ変更すればそこそこ動くんじゃないだろうか。

<!---------------------------------------------------------------------------------->
<!--date		new/upd/del	author				comments	-->
<!--2015/02/27	新規作成	marujx							-->
<!--20XX/XX/XX										-->
<!---------------------------------------------------------------------------------->
<html><head>
<title>AD問い合わせツール</title></head>
<body>
<form name="formMain">
ADへの社員問い合わせを行います。<BR>
組み合わせ検索は行えません。複数条件を指定した場合、上の条件で検索されます。
    <p>
      <input type="button" value="問い合わせ実行" onClick="ADQuery()" />
    </p>
    社員ID<input type="text" name="ID" cols="16" value="" /><BR>
    備考<input type="text" name="Code" rows="25" value="" /><BR>
    社員名<input type="text" name="Name" rows="25" value="" /><BR><BR>
社員名   社員ID 備考   部署
<textarea name="Result" cols="80" rows="15">
</textarea>
</form>
<script language="VBScript">
Option Explicit

Sub Window_onLoad
	window.resizeTo 640,480
End Sub 

sub ADQuery()

Dim LDAPName
Dim baseDN, objRootDSE
Dim objConnection, objCommand, strCommandText
Dim objRecordSet, strUserDN

baseDN = ""

'LDAPサーバ名を記載
LDAPName = "LDAP://hoge.co.jp"

' ベースDNの取得
On Error Resume Next
Set objRootDSE = GetObject("LDAP://rootDSE")
If Err.Number <> 0 Then
  WScript.Echo "ドメイン接続に失敗しました。終了します。"
  WScript.Quit
Else
  baseDN = objRootDSE.Get("defaultNamingContext")
End If

msgbox baseDN
On Error Goto 0

' DCに接続して検索
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection


Dim objADSystemInfo
Dim objUser
Dim Result

Dim Code
Dim id
Dim Name

If document.formMain.code.value<>"" then
    Code = document.formMain.code.value
    objCommand.CommandText = _ 
        "SELECT description,DisplayName,cn,Department FROM '" & LDAPName & "' WHERE Description='" & code & "'"   
ElseIF document.formMain.ID.value<>"" then
    id = document.formMain.ID.value
    objCommand.CommandText = _ 
        "SELECT description,DisplayName,cn,Department FROM '" & LDAPName & "' WHERE cn='" & id & "'"   
ElseIF document.formMain.Name.value<>"" then
    Name = document.formMain.Name.value
    objCommand.CommandText = _ 
        "SELECT description,DisplayName,cn,Department FROM '" & LDAPName & "' WHERE DisplayName='*" & Name & "*'"
Else
    Exit sub
End If

Set objRecordSet = objCommand.Execute 

Do 
    
    If (objRecordSet.EOF) Then
        Exit Do
    End If

    Dim vDescVal 
    Dim vDescVals 

    Result = Result & objRecordSet.Fields("DisplayName")
    Result = Result & "	" & objRecordSet.Fields("cn")
    Result = Result & "	"
    If Not IsNull(objRecordSet.Fields("description")) Then
        vDescVals = objRecordSet.Fields("description")
        For Each vDescVal In vDescVals
            Result=Result & vDescVal 
        Next
    End If
    Result = Result &  "	"  & objRecordSet.Fields("Department") & vbcrlf
    objRecordSet.MoveNext
    
Loop

document.formMain.Result.value=Result
Set objRecordSet = Nothing
Set objADSystemInfo = Nothing
End sub
</script>
</body></html>