É necessário criar o script do PowerShell para alterar a expiração e a data da senha para alterar a próxima senha

4

Recebi a tarefa de criar um script que lê em um arquivo uma lista de IDs de usuário do Active Directory e, em seguida, limpa o sinalizador de "Password Never Expires". Além disso, meu agente de segurança não deseja que os 500 usuários que têm essa configuração tenham suas senhas imediatamente redefinidas, então ele queria que a Política de Domínio padrão de 90 dias fosse atribuída no momento em que o script fosse executado. o usuário se enquadra na rotação usual de senha.

Estou tentando criar um script do PowerShell para fazer exatamente isso e estou com problemas. Evidentemente, eu não sou o melhor no PowerShell, então eu apreciaria alguma entrada.

Eu tenho a bandeira para limpar, mas mudar o PwdLastSet para -1 está provando ser complicado. Eu acho que pode ser porque eu não sei ler em um arquivo e fazer dois comandos "ForEach-Object" da leitura em um arquivo. Alguém poderia por favor olhar?

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  

          }  

}  

Eu recebo vários erros de parâmetro posicional dizendo que ele não pode aceitar o argumento $ null, mas não tenho certeza de onde estou errado.

    
por Dave H. 11.09.2014 / 15:48

3 respostas

3

O AD não permite que você altere a data em que uma senha foi redefinida pela última vez, exceto para 0 (o que forçará uma alteração de senha no próximo login). Para fazer isso, você não pode definir o PwdLastSet manualmente, você tem que usar algo como o seguinte snippet:

Set-ADUser -Identity JoeBlow -ChangePasswordAtNextLogon $true
    
por 11.09.2014 / 15:57
2

Desista, porque você não pode (diretamente) modificar o atributo pwdLastSet de um usuário. Esse atributo só pode ser definido pelo sistema (o mecanismo de serviços de diretório) em si. (ERROR_DS_ATTRIBUTE_OWNED_BY_SAM)

Consulte o Microsoft doc MS-ADTS para obter mais informações.

    
por 11.09.2014 / 15:58
1

Eu consegui fazer isso com o seguinte:

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 
}

Extraído de aqui

    
por 09.01.2017 / 18:36