Назад | Перейти на главную страницу

Необходимо создать сценарий PowerShell, чтобы изменить срок действия пароля и дату, чтобы изменить следующий пароль.

Мне было поручено создать сценарий, который считывает в файле список идентификаторов пользователей Active Directory, а затем сбрасывает флаг для пароля никогда не истекает. Кроме того, мой офицер безопасности не хочет, чтобы у 500 пользователей, у которых есть этот параметр, сразу же был сброшен их пароль, поэтому он хотел, чтобы политика домена по умолчанию на 90 дней была назначена во время запуска сценария, поэтому пользователь попадает в обычную ротацию паролей.

Я пытался создать сценарий PowerShell для этого, и у меня возникли проблемы. По общему признанию, я не лучший в PowerShell, поэтому был бы признателен за ваш вклад.

Мне нужно сбросить флаг, но изменить PwdLastSet на -1 оказалось непросто. Я думаю, это может быть потому, что я не умею читать в файле и выполнять две команды «ForEach-Object» из файла. Кто-нибудь может посмотреть?

Import-CSV PasswordExpiry.csv | ForEach-Object {Set-ADUser -Identity $_.SamAccountName -PasswordNeverExpires:$false}

ForEach-Object {  
 $samaccountname = $_.SamAccountName  
  $today = Get-Date  

  $lastchange = [datetime]::FromFileTime($_.pwdlastset[0])  

  $timediff = New-TimeSpan $lastchange $(Get-Date)  

      $hoursdiff = $timediff.TotalHours  

  if ($hoursdiff -lt $hourschange_sincePwdChange) {  
    $todouser = Get-ADUser $samaccountname -Properties pwdLastSet  

    $todouser.pwdLastSet = 0  
    Set-ADUser -Instance $todouser  

    $todouser.pwdLastSet = -1  
    Set-ADUser -Instance $todouser  

          }  

}  

Я получаю несколько ошибок позиционного параметра, в которых говорится, что он не может принять аргумент $ null, но я не уверен, где я ошибаюсь.

AD не позволит вам изменить дату последнего сброса пароля, кроме 0 (что приведет к смене пароля при следующем входе в систему). Для этого вы не можете установить PwdLastSet вручную, вам нужно использовать что-то вроде следующего фрагмента:

Set-ADUser -Identity JoeBlow -ChangePasswordAtNextLogon $true

Сдавайтесь, потому что вы не можете (напрямую) изменить атрибут pwdLastSet пользователя. Этот атрибут может быть установлен только самой Системой (механизмом служб каталогов). (ERROR_DS_ATTRIBUTE_OWNED_BY_SAM)

Дополнительную информацию см. В документации Microsoft MS-ADTS.

Мне удалось добиться этого с помощью следующего:

Import-Module ActiveDirectory

$ADUserParams=@{ 
'Searchbase' = 'OU=Users,OU=Testing,OU=IT,OU=XXX,DC=XXX,DC=local' 
'Filter' = '*' 
'Properties' = 'cn','sn','givenname','displayName','mail','description','UserPrincipalName', 'employeeNumber', 'profilepath', 'title' 
}

$ADUsers = Get-ADUser @ADUserParams 
ForEach ($ADUser in $ADUsers) { 
    $ADUser = Get-ADUser $ADUser -properties pwdlastset 
    $ADUser.pwdlastset = 0 
    Set-ADUser -Instance $ADUser 
    $ADUser.pwdlastset = -1 
    Set-ADUser -instance $ADUser 
}

Взято из Вот