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...