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

3

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 da VM, e a CPU do win7 é domained para o servidor e pode executar corretamente o Active Directory Module para o powershell. Eu sou muito novo no powershell e lidando com servidores [este projeto é meu treinamento no 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

Eu pensei que talvez 'invocar' fosse algo apenas no powershell 3, mas ao olhar para o artigo technet, ele diz que se aplica ao powershell 2 também. Eu tenho uma conta no AD como 'teste', mas não tenho certeza se esse é o nome comum real (primeiro nome: teste, sobrenome: teste, nome de logon do usuário: [email protected]) Alguém pode me dizer se a exceção está se referindo que eu tenho um CN OR incorreto é algo completamente diferente?

    
por Bob 06.09.2013 / 00:29

1 resposta

1

Concorde com os comentários acima.

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

Portanto, na sua instância, primeiro você precisa confirmar se o objeto do usuário existe. Você pode fazer isso usando o cmdlet Get-ADUser , com base nos critérios de pesquisa escolhidos. Agora, neste estágio, sugiro tornar a pesquisa bastante prescritiva, ou seja, você só retorna 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.";
    }

Em seguida, você pode usar o cmdlet Set-ADAccountPassword para redefinir a senha (consulte o hiperlink) . Isso requer o nome distinto (DN) do usuário, que será um atributo do seu objeto $ objUser retornado pela chamada Get-ADUser .

Eu não posso testar isso aqui, então se você tentar isso a partir de um prompt interativo do PowerShell, poderá ver quais atributos existem para o seu objeto $ objUser :

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

Suspeito que exista um atributo DN ou DistinguishedName , mas, como eu disse, não posso testar daqui.

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

    
por 06.09.2013 / 22:34