Хорошо, вот что у меня есть:
@echo off
powershell "$uid=(Read-Host -Prompt 'Enter UserID');$u = (net user $uid /domain);$u;$lockout=($u | select-string -pattern 'Account active.*Locked');$expired=((get-date ([String]($u | select-string 'Password expires')).Substring(16).Trim()) -lt (get-date));if ($lockout) { Write-Host 'Account locked out' -Foreground 'Red' } else { Write-Host 'Account not locked out' -Foreground 'Green' } if ($expired) { Write-Host 'Password Expired' -Foreground 'Red' } else { Write-Host 'Password not expired' -foreground 'Green' }"
pause
Небольшой фон, если хотите, в противном случае пропуститенемного вниз
Я аналитик службы поддержки уровня 1, мои пользователи позвонят и сообщат, что, по их мнению, срок действия пароля истек или учетная запись заблокирована.Я занимаюсь этим некоторое время, поэтому для меня нет проблем с поиском их учетной записи в активном каталоге.Я являюсь частью специальной команды, то есть мы обслуживаем только 1 клиента.У нас есть то, что называется командами рычагов, которые принимают звонки, когда посвященные заняты.Я делаю это, чтобы парням с кредитным плечом было легче, поскольку у них не всегда загружен ресурс AD.
Перейдите сюда, если вас не интересует история прошлого.:
Проблема, с которой я сталкиваюсь, заключается в том, что наш активный каталог неправильно отображает дату истечения срока действия пароля при выполнении «net user% username% / domain».Он отображается как 1 год с поля последнего установленного пароля, когда он должен составлять 90 дней с последней установленной даты.Создание части моего командного файла, который выводится, если срок его действия истек, всегда некорректно.
Могу ли я получить поле последнего установленного пароля, добавить 90 дней и получить ли на нем дату истечения срока действия пароля?Или сравнить эту дату с текущей датой и определить, прошла ли она уже?Может быть, вычесть год и добавить 90 дней в поле срока действия пароля?Это все очень чуждо мне, так как я собрал большую часть из поисков в Google, этого сайта, Reddit и некоторых коллег на работе.Так что я открыт для предложений.
Я очень признателен за любую помощь, которую вы можете оказать, и если это неправильное место для этого, мои извинения.
Edit1: Итак, я попробовал кое-что и изменил строку;
Я изменил:
$expired=((get-date ([String]($u | select-string 'Password expires')).Substring(16).Trim()) -lt (get-date))
на
$expired=((get-date ([String]($u | select-string 'Password last set')).Substring(16).Trim()) -lt (get-date).AddDays(30))
, но теперь я получаю ошибку.
Get-Date : Cannot bind parameter 'Date'. Cannot convert value "t 10/18/2018 8:13:05 AM" to type
"System.DateTime". Error: "The string was not recognized as a valid DateTime. There is an unknown word starting at
index 0."
At line:1 char:156
+ ... =((get-date ([String]($u | select-string 'Password last set')).Substr ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-Date], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.GetDateCommand
Это то, чем я закончил, и он отлично работает в среде, где мне это нужно.
@echo off
powershell "$uid=(Read-Host -Prompt 'Enter UserID');$u = (net user $uid /domain);$u;$lockout=($u | select-string -pattern 'Account active.*Locked');$expiredate=get-date ([String]($u | select-string 'Password expires')).Substring(16).Trim();$expired=$expiredate.AddDays(-275) -lt (get-date);if ($lockout) { Write-Host 'Account locked out' -Foreground 'Red' } else { Write-Host 'Account not locked out' -Foreground 'Green' } if ($expired) { Write-Host 'Password Expired' -Foreground 'Red' } else { Write-Host 'Password not expired' -foreground 'Green' }"
pause