Как прочитать свойство `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