作成 2010.01.05
更新 2010.01.05
更新 2010.01.05
ユーザー作成時刻と最終ログオン時刻とパスワード設定時刻
このサンプルでは Active Directory のユーザーアカウントを検索し、作成時刻と最終ログオン時刻、パスワード設定時刻を一覧で表示します。
Option Explicit
' CScriptで実行してください
Dim WshShell
Dim strEnvDnsDomain, arrItem, baseDN, i
Dim objConnection, objCommand, objRecordSet, strCommandText
Dim strUserName, dateCreated, objDateTime, dateLastLogon, datePassword
' DNSドメインを取得しbaseDNを設定
Set WshShell = CreateObject("WScript.Shell")
strEnvDnsDomain = WshShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%")
If Left(strEnvDnsDomain, 1) = "%" Then
WScript.Echo "操作しているPCはActive Directoryドメインに参加していないようです。" & vbNewLine & _
"終了します。"
WScript.Quit
End If
arrItem = Split(strEnvDnsDomain, ".")
baseDN = ""
For i = 0 to UBound(arrItem)
If i = 0 Then
baseDN = "DC=" & arrItem(i)
Else
baseDN = baseDN & ",DC=" & arrItem(i)
End If
Next
' DCに接続
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
strCommandText = "<LDAP://" & baseDN & ">;" & _
"(&(objectClass=user)(!objectClass=computer));" & _
"distinguishedName,sAMAccountName,whenCreated,lastLogon,pwdLastSet;" & _
"subtree"
objCommand.CommandText = strCommandText
Set objRecordSet = objCommand.Execute
WScript.Echo "UserName" & vbTab & "CreateDate" & vbTab & "LastLogonDate" & vbTab & "PasswordLastSet"
Do Until objRecordset.EOF
strUserName = objRecordset.Fields("sAMAccountName")
dateCreated = objRecordset.Fields("whenCreated")
objDateTime = objRecordset.Fields("lastLogon")
dateLastLogon = GetDateTime(objDateTime)
objDateTime = objRecordset.Fields("pwdLastSet")
datePassword = GetDateTime(objDateTime)
WScript.Echo strUserName & vbTab & dateCreated & vbTab & dateLastLogon & vbTab & datePassword
objRecordset.MoveNext
Loop
objConnection.Close
Set objCommand = Nothing
Function GetDateTime(ByVal objDateTime)
Dim deltaTime
If IsNull(objDateTime) Then ' 2000 Server から移行していると Null の場合がある
GetDateTime = #1/1/1601#
Exit Function
End If
If objDateTime.LowPart < 0 Then
deltaTime = objDateTime.HighPart + 1
Else
deltaTime = objDateTime.HighPart
End If
deltaTime = deltaTime * (2^32) + objDateTime.LowPart
deltaTime = (deltaTime / (60 * 10000000) + 540) / 1440
GetDateTime = deltaTime + #1/1/1601#
End Function