我需要在 AD DirectoryEntry 中设置 accountExpires 属性,但找不到简单的答案。找到一些资料;
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/182bfb6a-8b23-4c96-9379-101a4d91241a
http://www.rlmueller.net/AccountExpires.htm
看了一些关于 ADS****.dll 的文章,但认为我不需要使用这种方法
Dim valueToSet As Date = Now.AddDays(10)
Dim ADSPath As String = "LDAP://cn=..."
Dim de As DirectoryEntry = New DirectoryEntry(ADSPath)
Dim d As TimeSpan = valueToSet.ToUniversalTime - Date.Parse("01/01/1601")
Dim ValueToSetAsString As String = d.Ticks.ToString
' it appears that the ticks value is too large for the value of the directory entry
' converting to a string (18 chars or so) works!
de.Properties("accountexpires").Value = ValueToSetAsString
感谢 Brian,看起来上面编写的大量代码可以简化;
de.Properties("accountexpires").Value = valueToSet.ToFileTime.ToString
在 VB.NET 中返回 AccountExpires 和其他 largeInteger 问题的函数
Function ConvertADValueToDateTime(ByVal li As Object) As DateTime
' http://bytes.com/topic/visual-basic-net/answers/512901-lastlogontimestamp
Try
Dim lngHigh = li.HighPart
Dim lngLow = li.LowPart
Dim lastLogon = (lngHigh * 2 ^ 32) - lngLow
Dim returnDateTime As DateTime = DateTime.FromFileTime(lastLogon)
Return returnDateTime
Catch ex As Exception
Return Nothing
End Try
End Function
示例使用:
Dim d As DateTime = ConvertADValueToDateTime(de.Properties("accountexpires").value)
If d = "01/01/1601" Then
' no expiry date
Return Nothing
Else
Return d
End If
另一种方法