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

Это сбивало меня с толку последние пару дней. Невозможно передать параметр в 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, он работал нормально.

Итак, есть небольшая проблема в том, как передается параметр.


person Explicitsoul    schedule 25.05.2018    source источник
comment
Почему вы передаете пароль функции в виде обычного текста? Вы можете избежать всей проблемы, передав вместо этого объект PSCredential.   -  person Bill_Stewart    schedule 25.05.2018
comment
Привет, извините за поздний ответ. Я создаю PSCredential, используя входные данные. Есть лучший способ сделать это? имея в виду, что этот скрипт будет запускаться из gitlab и может хранить безопасные учетные данные, которые будут расшифрованы и переданы.   -  person Explicitsoul    schedule 05.06.2018


Ответы (2)


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

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

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

person Adam Parsons    schedule 27.05.2018

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

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

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

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

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

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

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

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

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

person Explicitsoul    schedule 05.06.2018