уверен, если вы продолжите выполнять работу в PowerShell:
powerShell.AddScript ("[datetime] :: FromFileTimeUt c ((Get-ADUser" + Login + "-Properties msDS-UserPasswordExpiryTimeComputed) | Выберите -Expand \ "msDS-UserPasswordExpiryTimeComputed \" ")));
Однако оба бита кода вернут дату и время: понедельник, 1 января, 1601, 12:00:00; в условиях, когда 'MSDS-UserPasswordExpiryTimeComputed' является '0' или нуль:!
Если какой-либо из ADS_UF_SMARTCARD_REQUIRED, ADS_UF_DONT_EXPIRE_PASSWD, ADS_UF_WORKSTATION_TRUST_ACCOUNT, ADS_UF_SERVER_TRUST_ACCOUNT, ADS_UF_INTERDOMAIN_TRUST_ACCOUNT бит установлен в TO UserAccountControl, потом MSDS -UserPasswordExpiryTimeComputed = 0x7FFFFFFFFFFFFFFF.
Иначе, если TO! PwdLastSet = null или TO! PwdLastSet = 0, то TO! MsDS-UserPasswordExpiryTimeComputed = 0.
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 затем TO! msDS-UserPasswordExpiryTimeComputed = 0x7FFFFFFFFFFFFFFF (где Effective-MaximumPasswordAge определен в разделе [MS-SAMR] 3.1.1.5).
Иначе, TO! msDS-UserPasswordExpiryTimeComputed = TO! pwdLastSet = TO! pwdLastS где Effective-MaximumPasswordAge определено в разделе 3.1.1.5 [MS-SAMR].
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/f9e9b7e2-c7ac-4db6-ba38-71d9696981e9
Hi Ho shie , вы правы, мне не хватало скобок внутренняя команда в своем собственном. Что касается возможных ошибок, см. Редактирование ниже:
PS C:\Windows\system32> (Get-ADUser [MyUserAccount] -Properties msDS-UserPasswordExpiryTimeComputed | Select-Object -ExpandProperty msDS-UserPasswordExpiryTimeComputed)
9223372036854775807
PS C:\Windows\system32> [int64]::MaxValue 9223372036854775807
PS C:\Windows\system32> [datetime]::MaxValue
Friday, December 31, 9999 11:59:59 PM
PS C:\Windows\system32> [datetime]::MaxValue.ToFileTimeUtc()
2650467743999999999
PS C:\Windows\system32> [datetime]::MaxValue.ToFileTime()
2650467743999999999
Итак, проблема, с которой вы сталкиваетесь, заключается в том, что значение, возвращаемое из этого свойства, может быть БОЛЬШЕ, чем максимально возможное значение, принимаемое объект DateTime - обратитесь к статье MSDN для всех условий, где это значение возвращает Int64.MaxValue '9223372036854775807' (0x7FFFFFFFFFFFFFFF).
Эту возможность необходимо обрабатывать либо в PowerShell, либо C# , Вот пример того, как это может быть решено в PowerShell:
$var = (Get-ADUser [MyUserName] -Properties msDS-UserPasswordExpiryTimeComputed | Select-Object -ExpandProperty msDS-UserPasswordExpiryTimeComputed)
if ($var -and $var -ne [int64]::MaxValue) {
## Do something with the value
} else {
## Value is either $null or -eq to the Max Value of a Signed 64-bit integer
}
## OR
if ($var -and $var -ge 0 -and $var -lt [datetime]::MaxValue.ToFileTimeUtc()) {
$true
## Do something
}