2017-03-14 35 views
0

J'automatise la modification de mots de passe sur des cibles PowerShell distantes à l'aide d'une commande ADSI que j'envoie via Invoke-Command. J'utilise la commande PowerShell suivante pour envoyer la commande ADSI à la machine distante:Variables au sein de la commande ADSI sur la cible PowerShell distante

Invoke-Command -ComputerName $computer -ScriptBlock { 
    (([ADSI]“WinNT://localhost/Administrator”).SetPassword($new_password)).SetInfo 
} -Credential $mycred 

Tout fonctionne, sauf pour la variable $new_password. Si j'entre une chaîne directement dans la commande ADSI (dans la méthode SetPassword()), le mot de passe est modifié avec succès sur le client distant. Toutefois, si j'utilise la variable $new_password à la place, le mot de passe administrateur sur le client distant est défini comme vide. Toutes les autres variables, par exemple $computer et $mycred semblent fonctionner correctement dans l'ensemble de la commande Invoke-Command, mais ce n'est qu'un seul $ new_password qui ne fonctionne pas. Même si je fais ce qui suit:

$new_password = "mypassword" 
Invoke-Command -ComputerName $computer -ScriptBlock { 
    (([ADSI]“WinNT://localhost/Administrator”).SetPassword($new_password)).SetInfo 
} -Credential $mycred 

Répondre

1

passage de variables dans scriptblock devraient ressembler à ceci:

$new_password = "mypassword" 
Invoke-Command -ComputerName $computer -Credential $mycred -ScriptBlock {param($new_password) (([ADSI]“WinNT://localhost/Administrator,user”).SetPassword($new_password)).SetInfo } -argumentlist $new_password 

et l'ADSI devraient être ([ADSI]“WinNT://localhost/Administrator,user”)