Для меня определили задачу с созданием сценария, который читает в файле список идентификаторов Пользователя Active Directory и затем очищается, флаг для Пароля Никогда Не Истекает. Кроме того, мой офицер охраны не хочет 500 пользователей, которые имеют эту установку, чтобы иметь их пароль, сразу должны быть сброшены, таким образом, он хотел, чтобы Доменная политика по умолчанию 90 дней была приписана в то время, когда сценарий, работал, таким образом, пользователь попадает в обычное вращение пароля.
Я пытался создать сценарий PowerShell, чтобы сделать просто это, и сталкиваюсь с проблемами. По общему признанию я не являюсь лучшим в PowerShell, таким образом, я ценил бы некоторый вход.
У меня есть флаг для очистки, но изменение PwdLastSet к-1 оказывается хитрым. Я думаю, что это могло бы быть, потому что я не знаю, как читать в файле и сделать две "ForEach-объектных" команды от чтения в файле. Кто-то мог посмотреть?
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 пользователя. Этот атрибут может быть установлен только самой системой (Directory Services Engine). (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
}
Взято из здесь