トップ回答者
VBScriptを使用して、ADのユーザー情報からpwdLastSetを取得したい

質問
回答
-
こんな感じですかね?
Dim adoCommand, adoConnection, adoRecordset Dim objRootDSE, objPwdLastSet Dim strDNSDomain, strBase, strFilter, strAttributes, strQuery, strSamAccountName, dtmPwdLastSet Set adoCommand = CreateObject("ADODB.Command") Set adoConnection = CreateObject("ADODB.Connection") adoConnection.Provider = "ADsDSOObject" adoConnection.Open "Active Directory Provider" Set adoCommand.ActiveConnection = adoConnection Set objRootDSE = GetObject("LDAP://RootDSE") strDNSDomain = objRootDSE.Get("defaultNamingContext") strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(&(objectCategory=person)(objectClass=user))" strAttributes = "sAMAccountName,pwdLastSet" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree" adoCommand.CommandText = strQuery Set adoRecordset = adoCommand.Execute Do Until adoRecordset.EOF strSamAccountName = adoRecordset.Fields("sAMAccountName").Value dtmPwdLastSet = GetDateTime(adoRecordset.Fields("pwdLastSet").Value) Wscript.Echo strName & ", " & dtmPwdLastSet adoRecordset.MoveNext Loop adoRecordset.Close adoConnection.Close Function GetDateTime(objPwdLastSet) Dim lngHigh, lngLow Dim delta lngHigh = objPwdLastSet.HighPart lngLow = objPwdLastSet.LowPart If (lngLow < 0) Then lngHigh = lngHigh + 1 End If delta = lngHigh * (2^32) + lngLowPart delta = (delta / (60 * 10000000) + 540) / 1440 GetDateTime = delta + #1/1/1601# End Function
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年12月21日 0:08
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2018年1月12日 1:37
すべての返信
-
こんな感じですかね?
Dim adoCommand, adoConnection, adoRecordset Dim objRootDSE, objPwdLastSet Dim strDNSDomain, strBase, strFilter, strAttributes, strQuery, strSamAccountName, dtmPwdLastSet Set adoCommand = CreateObject("ADODB.Command") Set adoConnection = CreateObject("ADODB.Connection") adoConnection.Provider = "ADsDSOObject" adoConnection.Open "Active Directory Provider" Set adoCommand.ActiveConnection = adoConnection Set objRootDSE = GetObject("LDAP://RootDSE") strDNSDomain = objRootDSE.Get("defaultNamingContext") strBase = "<LDAP://" & strDNSDomain & ">" strFilter = "(&(objectCategory=person)(objectClass=user))" strAttributes = "sAMAccountName,pwdLastSet" strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree" adoCommand.CommandText = strQuery Set adoRecordset = adoCommand.Execute Do Until adoRecordset.EOF strSamAccountName = adoRecordset.Fields("sAMAccountName").Value dtmPwdLastSet = GetDateTime(adoRecordset.Fields("pwdLastSet").Value) Wscript.Echo strName & ", " & dtmPwdLastSet adoRecordset.MoveNext Loop adoRecordset.Close adoConnection.Close Function GetDateTime(objPwdLastSet) Dim lngHigh, lngLow Dim delta lngHigh = objPwdLastSet.HighPart lngLow = objPwdLastSet.LowPart If (lngLow < 0) Then lngHigh = lngHigh + 1 End If delta = lngHigh * (2^32) + lngLowPart delta = (delta / (60 * 10000000) + 540) / 1440 GetDateTime = delta + #1/1/1601# End Function
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年12月21日 0:08
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2018年1月12日 1:37
-
フォーラムオペレーターの栗下 望です。
hiro.z07 さん、こんにちは。Tomoaki Yoshizawa さんの回答はご覧いただけましたでしょうか?
お試し済みであれば結果のご共有をいただけますと幸いです。既に問題が解決済みだった場合は、参考になった回答に[回答としてマーク]をご設定くださいね。
どうぞよろしくお願いいたします。
MSDN/TechNet Community Support 栗下 望