Как прочитать свойство `ms-Mcs-AdmPwdExpirationTime` из ActiveDirectory

Я пытаюсь прочитать срок действия пароля администратора от ActiveDirectory:

Dim DC = New  PrincipalContext(ContextType.Domain)
Dim cmp = ComputerPrincipal.FindByIdentity(DC, hostnm)
Dim desting As String = cmp.DistinguishedName
Dim de As New DirectoryEntry("LDAP://" & desting)
pwdexp = de.Properties("ms-Mcs-AdmPwdExpirationTime").Value.ToString()

Но то, что я вижу, это просто <COM Type>:

Однако срок действия пароля администратора может быть легко прочитан PowerShell:

$TestValue = [adsi]"LDAP://CN=xxx,OU=xxx,OU=xxx,OU=xxx,OU=xxx,DC=xxx,DC=xxx,DC=xx"
$TestValue.ConvertLargeIntegerToInt64($Testvalue."ms-Mcs-AdmPwdExpirationTime"[0])

И я знаю, что есть такое свойство:

Интересно, но я могу прочитать другой параметр ms-Mcs-AdmPwd:

Dim DC = New  PrincipalContext(ContextType.Domain)
Dim cmp = ComputerPrincipal.FindByIdentity(DC, hostnm)
Dim desting As String = cmp.DistinguishedName
Dim de As New DirectoryEntry("LDAP://" & desting)
pwdexp = de.Properties("ms-Mcs-AdmPwdExpirationTime").Value.ToString()

и значение можно увидеть из отладчика:

Как читать недвижимость ms-Mcs-AdmPwdExpirationTime правильно?

3 ответа

Это работает для меня в powershell:

$comp = Get-ADComputer Laptop8 -Properties ms-MCS-AdmPwdExpirationTime
$([datetime]::FromFileTime([convert]::ToInt64($comp.'ms-MCS-AdmPwdExpirationTime',10)))

удачи Сем

https://www.rlmueller.net/Integer8Attributes.htm

Многие атрибуты в Active Directory имеют тип данных (синтаксис), называемый Integer8. Эти 64-битные числа (8 байтов) часто представляют время с интервалом в 100 наносекунд. Если атрибут Integer8 является датой, значение представляет собой количество 100-наносекундных интервалов с 00:00 1 января 1601 года. Любые дополнительные секунды игнорируются.

В .NET Framework (и PowerShell) эти 100-наносекундные интервалы называются тактами и равны одной десятимиллионной секунды. В миллисекунду происходит 10 000 тиков. Кроме того, значения DateTime .NET Framework и PowerShell представляют даты как количество тиков с 00:00 1 января 0001 года.

ADSI автоматически использует интерфейс IADsLargeInteger для работы с этими 64-битными числами. Этот интерфейс имеет два метода свойств: HighPart и LowPart, которые разбивают число на два 32-битных числа. Методы свойств HighPart и LowPart возвращают значения в диапазоне от -2^31 до 2^31 - 1. Эта программа VBScript демонстрирует стандартный метод обработки этих атрибутов для получения значения lockoutDuration домена за считанные минуты.

cls;$error.clear()

$computer = Read-host "Enter the name of the computer"

$LocalAdmin = "" | Select Computer,AdmPwd,Expires

$LocalAdmin.Computer = $Computer

$LocalAdmin.AdmPwd = $(Get-ADComputer $computer -Properties ms-MCS-AdmPwd | select -ExpandProperty ms-MCS-AdmPwd)

$FileTime = Get-ADComputer $computer -Properties ms-MCS-AdmPwdExpirationTime

$LocalAdmin.Expires  = $([datetime]::FromFileTime([convert]::ToInt64($FileTime.'ms-MCS-AdmPwdExpirationTime',10)))


$LocalAdmin | ft -AutoSize
Другие вопросы по тегам