Usando Powershell (RSAT) para redefinir senhas no AD (Win Server 2008)

Usando Powershell (RSAT) para redefinir senhas no AD (Win Server 2008)

Estou usando um script do PowerShell que encontrei on-line, tentando usar uma CPU win7 para alterar senhas remotamente em um Windows Server 2008 via RSAT. No momento, o servidor 2008 e o win7 são VMs, e a CPU do win7 está sob domínio do servidor e pode executar corretamente o Módulo Active Directory para PowerShell. Sou muito novo no PowerShell e em lidar com servidores [este projeto é meu treinamento em meu estágio] e estou recebendo um erro ao tentar compilar este script.

import-Module ActiveDirectory
Function Set-AdUserPwd 
{ 
    Param( 
    [string]$user, 
    [string]$pwd 
    ) #end param 
    $oUser = [adsi]"LDAP://$user" 
    $ouser.psbase.invoke("SetPassword",$pwd) 
    $ouser.psbase.CommitChanges() 
} # end function Set-AdUserPwd 
    Set-AdUserPwd -user "cn=test,ou=Users,dc=ifrit,dc=local" -pwd P@ssword1

Exception calling "Invoke" with "2" argument(s): "There is no such object on the server.
"
At line:10 char:25
+     $ouser.psbase.invoke <<<< ("SetPassword",$pwd) 
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

Achei que talvez 'invocar' fosse algo apenas no PowerShell 3, mas ao olhar o artigo do technet, ele diz que se aplica ao PowerShell 2 também. Tenho uma conta no AD como 'teste', mas não tenho certeza se esse é o nome comum real (Nome: Teste, Sobrenome: Teste, Nome de logon do usuário:[e-mail protegido]) Alguém pode me dizer se a exceção se refere a que tenho um CN incorreto OU é algo totalmente diferente?

Responder1

Concordo com os comentários acima.

Você pode descartar as referências ao ADSI (Active Directory Scripting Interface), pois esta é a maneira "antiga" de fazer as coisas; o módulo Active Directory PS foi projetado para substituí-lo.

Portanto, na sua instância, primeiro você precisa confirmar se o objeto de usuário existe. Você pode fazer isso usando oObter-ADUsercmdlet, com base nos critérios de pesquisa escolhidos. Agora, neste estágio, sugiro que a pesquisa seja bastante prescritiva, ou seja, você retorne apenas um objeto de usuário, por exemplo:

try {
    $objUser = Get-ADUser -Filter { Name -eq $user }
    //
    // rest of code here
    //
    }
catch{
    Write-Host "ERROR : Failed to locate user.";
    }

Você pode então usar oDefinir-ADAccountPasswordcmdlet para redefinir a senha (veja o hiperlink). Isso requer o Nome Distinto (DN) do usuário, que será um atributo do seu$objUsuárioobjeto retornado porObter-ADUserchamar.

Não posso testar isso aqui, então se você tentar isso em um prompt interativo do PowerShell, poderá ver quais atributos existem para o seu$objUsuárioobjeto:

$test = Get-ADUser -Filter { Name -eq "jimbob" }
$test | Get-Member

Eu suspeito que há umDNouNome Distintoatributo, mas como eu disse, não posso testar daqui.

Experimente e atualize aqui com o progresso, se precisar de mais ajuda...

informação relacionada