作成 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