Powershell - como definir várias ações no get-aduser “dataset”

1

Estou tentando executar um script que modifique a senha para várias contas de usuário do AD, ative as contas e force uma alteração de senha no próximo logon.

Eu uso este código, mas isso não funciona:

Get-ADUSER -Filter * -SearchScope Subtree -SearchBase "OU=myou,OU=otherou,DC=mydc,DC=local" | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "NewPassord" -Force) | Enable-ADAccount | Set-ADUSER -ChangePasswordAtLogon $true

Se eu executar a linha Get-ADuser com APENAS uma das outras linhas executadas, ex:

Get-ADUSER -Filter * -SearchScope Subtree -SearchBase "OU=myou,OU=otherou,DC=mydc,DC=local" | Enable-ADAccount

Onde estou errado? Eu sou novo no PowerShell, provavelmente estou entendendo mal alguma coisa.

    
por Patrick Pellegrino 01.11.2012 / 22:16

2 respostas

4

Seu pipeline não funciona do jeito que você espera.

$UserList=Get-ADUSER -Filter * -SearchScope Subtree -SearchBase "OU=myou,OU=otherou,DC=mydc,DC=local"
foreach ($User in $UserList) {
    Set-ADAccountPassword $User -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "NewPassord" -Force
    Enable-ADAccount $User
    Set-ADUSER $user -ChangePasswordAtLogon $true
}

Os pipelines não são bons para várias ações no mesmo objeto. Eles só funcionam se cada comando no pipeline encaminha o mesmo objeto que o objeto inicial. Para isso, iterar através de um loop faz muito mais sentido.

    
por 01.11.2012 / 22:44
0

Get-ADUSER -Filter * -SearchScope Sub-pesquisa -SearchBase "UO = myou, UO = otherou, DC = mydc, DC = local" | % { Set-ADAccountPassword $ .Name -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "NewPassord" -Force) Enable-ADAccount $ .Name Set-ADUSER $ _. Name-ChangePasswordAtLogon $ true }

    
por 19.04.2013 / 20:42