如何从 ActiveDirectory 读取属性“ms-Mcs-AdmPwdExpirationTime”

如何从 ActiveDirectory 读取属性“ms-Mcs-AdmPwdExpirationTime”

我正在尝试阅读管理员密码过期时间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>在此处输入图片描述

然而,管理员密码过期时间可以轻松读取电源外壳

$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

答案1

这在 powershell 中对我有用:

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

祝你好运 Sem

答案2

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

Active Directory 中的许多属性都具有称为 Integer8 的数据类型(语法)。这些 64 位数字(8 字节)通常以 100 纳秒为间隔表示时间。如果 Integer8 属性是日期,则该值表示自 1601 年 1 月 1 日凌晨 12:00 以来的 100 纳秒间隔数。任何闰秒都会被忽略。

在 .NET Framework(和 PowerShell)中,这些 100 纳秒的间隔称为“刻度”,相当于千万分之一秒。每毫秒有 10,000 个刻度。此外,.NET Framework 和 PowerShell DateTime 值将日期表示为自 0001 年 1 月 1 日凌晨 12:00 以来的刻度数。

ADSI 自动使用 IADsLargeInteger 接口来处理这些 64 位数字。此接口有两个属性方法 HighPart 和 LowPart,它们将数字拆分为两个 32 位数字。HighPart 和 LowPart 属性方法返回 -2^31 和 2^31 - 1 之间的值。此 VBScript 程序演示了处理这些属性的标准方法,以检索域 lockoutDuration 值(以分钟为单位)。

答案3

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

相关内容