Команда net user неверно отображает срок действия пароля;скрипт, который читает поле и выводит, если срок его действия неверен.Возможное решение? - PullRequest
0 голосов
/ 24 октября 2018

Хорошо, вот что у меня есть:

@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

Here is what the output looks like

Небольшой фон, если хотите, в противном случае пропуститенемного вниз

Я аналитик службы поддержки уровня 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

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Если вы хотите получить срок действия пароля для пользователя, вы можете преобразовать атрибут msDS-UserPasswordExpiryTimeComputed в DateTime

Ниже я приведу пример, чтобы перейти к более подробной информации.Имена переменных должны объяснять, что они собой представляют.Если вы запустите пример, вы заметите, что атрибут msDS-UserPasswordExpiryTimeComputed должен указать необходимую дату истечения срока действия.Тем не менее, другие варианты (добавление 90 дней) включены в пример.

Пример ( обновлено ):

    [string]$Identity = "User Account"     
    $expiredDate = [DateTime]::FromFileTime($((Get-ADUser -Identity $Identity -Properties 'msDS-UserPasswordExpiryTimeComputed').'msDS-UserPasswordExpiryTimeComputed'))
    $lastSetDate = [DateTime]::FromFileTime($((Get-ADUser -Identity $Identity -Properties 'pwdLastSet').'pwdLastSet'))
    Write-Host "Exipred Date: " $expiredDate
    Write-Host "Last Set Date: " $lastSetDate 

    $lastDate_Plus90 = $lastSetDate.AddDays(90)

    Write-Host "Last Set + 90 days: " $lastDate_Plus90
0 голосов
/ 24 октября 2018

Да, вы можете попробовать поиск по LDAP.

$Searcher=New-Object DirectoryServices.DirectorySearcher
$Searcher.Filter="(&(samaccountname=username))"
$Results=$Searcher.findone()
$Results.Properties

даст вам много информации, и последний набор паролей будет одним из них.

Я бы предложил вам датьгруппа поддержки сценарий PowerShell вместо командного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...