Uso de Powershell (RSAT) para restablecer contraseñas en AD (Win Server 2008)

Uso de Powershell (RSAT) para restablecer contraseñas en AD (Win Server 2008)

Estoy usando un script de PowerShell que encontré en línea, intentando usar una CPU Win7 para cambiar contraseñas de forma remota en un Windows Server 2008 a través de RSAT. En este momento, el servidor 2008 y win7 son máquinas virtuales, y la CPU de win7 está dominada por el servidor y puede ejecutar correctamente el módulo Active Directory para powershell. Soy bastante nuevo en PowerShell y trato con servidores [este proyecto es mi capacitación en mi pasantía] y recibo un error al intentar 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

Pensé que tal vez 'invocar' era algo solo en PowerShell 3, pero al mirar el artículo de Technet, dice que también se aplica a PowerShell 2. Tengo una cuenta en AD como 'prueba', pero no estoy seguro de si ese es el nombre común real (nombre: prueba, apellido: prueba, nombre de inicio de sesión del usuario:[correo electrónico protegido]) ¿Alguien puede decirme si la excepción se refiere a que tengo un CN incorrecto O es algo completamente diferente?

Respuesta1

De acuerdo con los comentarios anteriores.

Puede eliminar las referencias a ADSI (Active Directory Scripting Interface), ya que esta es la forma "antigua" de hacer las cosas; el módulo PS de Active Directory ha sido diseñado para reemplazarlo.

Entonces, en su caso, primero debe confirmar que el objeto de usuario existe. Puedes hacer esto usando elObtener-ADUsercmdlet, según el criterio de búsqueda que elija. Ahora, en esta etapa, sugeriría hacer la búsqueda bastante prescriptiva, es decir, para que solo devuelva un objeto de usuario, por ejemplo:

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

Luego puedes usar elEstablecer contraseña de cuenta ADcmdlet para restablecer la contraseña (ver hipervínculo). Esto requiere el Nombre Distinguido (DN) del usuario, que será un atributo de su$objUsuarioobjeto devuelto porObtener-ADUserllamar.

No puedo probar esto desde aquí, por lo que si lo intenta desde un mensaje interactivo de PowerShell, podrá ver qué atributos existen para su$objUsuarioobjeto:

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

Sospecho que hay unDNoNombre distinguidoatributo, pero como digo, no puedo probar desde aquí.

Pruébelo y actualice aquí con el progreso, si necesita más ayuda...

información relacionada