В вашем коде есть две очевидные ошибки, обе здесь:
@{n='DaysUntilExpired';e={(([datetime]::Now.AddDays(365) - [datetime]::$_.PasswordLastSet).Day).days}}
Однако я не могу сказать, следует ли вам указывать это:
@{n='DaysUntilExpired';e={([datetime]::Now.AddDays(365) - $_.PasswordLastSet).Days}}
Или, если вы ищем последний день месяца до истечения срока, тогда это:
@{n='DaysUntilExpired';e={(([datetime]::Now.AddDays(365) - $_.PasswordLastSet.Day).Days}}
Как сказано в комментариях, [datetime]::$_.PasswordLastSet
- это ерунда. Это первая ошибка. Во-вторых, свойство timespan равно Days
, а не Day
. Day
является свойством datetime.
Однако, предполагая, что вы пытаетесь вычислить дату истечения срока действия пароля, определенную политикой паролей AD, вам следует посмотреть на свойство msDS-UserPasswordExpiryTimeComputed
в AD, потому что это свойство содержит именно его. Вы должны преобразовать его из даты в большое целое число, но это то, что делает [datetime]::fromfiletime()
.
Get-ADUser -Filter * -Properties PasswordLastSet, Mail, 'msDS-UserPasswordExpiryTimeComputed' -SearchBase $searchBase |
Select-Object -Properties Name, PasswordLastSet, @{n='PasswordExpirationDate';e={[DateTime]::FromFileTime($_.'msDS-UserPasswordExpiryTimeComputed')}}
Это не делает все, что делает ваш скрипт, но тогда я не понимаю, почему вы ищете для учетных записей, пароль которых был установлен на точное количество дней в прошлом. Это не кажется полезным.