Установка пароля локального администратора Windows удаленно с помощью PowerShell и [ADSI] - PullRequest
0 голосов
/ 22 марта 2019

Так близко, но пока ...

Я пытаюсь изменить пароль локального администратора на сервере Windows с помощью [ADSI] и PowerShell, но не могу найти способ передать строковую переменную при вызове иполучить следующую ошибку:

Exception calling "Invoke" with "2" argument(s): "Number of parameters specified does not match the expected number."
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodTargetInvocation
+ PSComputerName        : vmdeploytest1

Это работает со строкой в ​​утверждении:

$vmName = "vmdeploytest1"

Invoke-Command -ComputerName $vmName -Credential $creds -ScriptBlock {
  $account = [ADSI]("WinNT://localhost/Administrator,user")
  $account.psbase.invoke("setpassword","Password123")
}

Это не так:

$vmName = "vmdeploytest1"   
$password = '"Password123"'
$invoke = '"setpassword",'
$invokeStr = $invoke + $password

Invoke-Command -ComputerName $vmName -Credential $creds -ScriptBlock {
$account = [ADSI]("WinNT://localhost/Administrator,user")
$account.psbase.invoke($invokeStr)
}

Это не 't

$vmName = "vmdeploytest1"   
$password = '"Password123"'

Invoke-Command -ComputerName $vmName -Credential $creds -ScriptBlock {
$account = [ADSI]("WinNT://localhost/Administrator,user")
$account.psbase.invoke("setpassword",$password)
}

Это не так:

$vmName = "vmdeploytest1"   
$password = 'Password123'

Invoke-Command -ComputerName $vmName -Credential $creds -ScriptBlock {
$account = [ADSI]("WinNT://localhost/Administrator,user")
$account.psbase.invoke("setpassword",$password)
}

Все дают одинаковую ошибку.Мне нужно иметь возможность использовать переменную, потому что я собираюсь сгенерировать случайный пароль.

1 Ответ

0 голосов
/ 22 марта 2019

Джероен Мостерт прав

Когда вы передаете переменные в ScriptBlock, вам необходимо добавить к ним префикс $using:

Например:

$vmName = "vmdeploytest1"   
$password = 'Password123'

Invoke-Command -ComputerName $vmName -Credential $creds -ScriptBlock {
$account = [ADSI]("WinNT://localhost/Administrator,user")
$account.psbase.invoke("setpassword",$using:password)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...