Невозможно передать параметр в ConvertTo-SecureString, только переменная, определенная сценарием - PullRequest
0 голосов
/ 25 мая 2018

Этот смутил меня или последние пару дней.Невозможно передать параметр в ConvertTo-SecureString, только переменная, определенная сценарием.

Когда я запускаю скрипт, я передаю несколько параметров.Одна из задач, которую нужно выполнить, - это подключиться к удаленной машине через PSSession, т.е.

./myscript.ps1 -VMPass "12345@!" -VMuser abc

. В моем скрипте есть следующее, которое будет передано New-PSSession:

[CmdletBinding()] 
Param(
    $VMuser,
    $VMPass
)

$PWord = ConvertTo-SecureString -AsPlainText -String "$VMPass" -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $VMuser, $PWord
$NewVMSession = (New-PSSession -ComputerName $NewVMAddress -Credential $cred -ErrorAction Stop)

Когда я запускаю это, я получаю следующую ошибку:

New-PSSession : [WIN-V2BK0KCPC7H] Connecting to remote server WIN-V2BK0KCPC7H
failed with the following error message : Access is denied. For more information,
see the about_Remote_Troubleshooting Help topic.
At C:\Users\ChildsC\Documents\Git\BAIC\Controller.ps1:85 char:26
+ ... MSession = (New-PSSession -ComputerName $NewVMAddress -Credential $vm ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed

Однако, если бы я должен был явно определить $VMPass = "12345@!" в скрипте, ИЛИ, если бы я должен был вызвать Get-Credential, он отлично работает.

Таким образом, существует небольшая проблема в способе передачи параметра.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

извините за поздний ответ.

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

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

Я думал о настройке шаблона ОС, но не могу использовать шаблоны для настройки виртуальной машины в домене, потому что у нас слишком много OU.

Мой обходной путь - отключить брандмауэр.У меня есть сценарии, которые подключают виртуальную машину к домену, и после добавления я могу снова включить брандмауэр.

Я не особенно удовлетворен этим, но это единственное, что работает на данный момент и является последовательным.Я попытался открыть некоторые конкретные порты, как подробно описано здесь: https://blogs.technet.microsoft.com/christwe/2012/06/20/what-port-does-powershell-remoting-use/

Но я снова не получил последовательных результатов.Но поскольку я знаю, что брандмауэр является проблемой, я могу вернуться к нему позже, чтобы определить, какие порты мне следует открыть.Я открыт для идей о том, как это сделать, если у кого-то есть что-нибудь:).

Я отмечу это как ответ.

Спасибо за ваше время.

0 голосов
/ 27 мая 2018

Чтобы убедиться, что попытка аутентификации действительна, не забудьте отформатировать имя пользователя для вашего домена как DomainName\UserName.Вам также может потребоваться предоставить соответствующее значение параметра -Authentication для вашего командлета New-PSSession.

Существует несколько вариантов аутентификации, и вы можете прочитать о них больше и о аутентификации WinRM в целом на MSDN - https://msdn.microsoft.com/en-us/library/aa384295(v=vs.85).aspx

Нет никаких прямых причин полагать, что синтаксис для вашегоСценарий виноват, однако, если вышесказанное не помогает, возможно, мы можем посмотреть на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...