远程PowerShell目标上的ADSI命令中的变量

时间:2017-03-14 02:48:20

标签: powershell adsi

我使用通过Invoke-Command发送的ADSI命令自动更改远程PowerShell目标上的密码。我使用以下PowerShell命令将ADSI命令发送到远程计算机:

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

$new_password变量外,一切正常。如果我直接在ADSI命令中输入字符串(在SetPassword()方法中),则在远程客户端上成功更改密码。但是,如果我使用$new_password变量,则远程客户端上的管理员密码将设置为空白。所有其他变量,即$computer$mycred似乎在整个Invoke-Command命令中都能正常运行,但只有一个$ new_password不起作用。即使我做了以下事情:

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

1 个答案:

答案 0 :(得分:1)

将变量传递到scriptblock应该是这样的:

$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

并且adsi应为([ADSI]“WinNT://localhost/Administrator,user”)