Запустите скрипт PowerShell в новом окне при передаче переменных - PullRequest
0 голосов
/ 14 сентября 2018

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

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

.\DeployMySQLProvider.ps1 -AzCredential $asdkCreds `
-VMLocalCredential $vmLocalAdminCreds `
-CloudAdminCredential $cloudAdminCreds
-PrivilegedEndpoint $ERCSip `
-DefaultSSLCertificatePassword $secureVMpwd -AcceptLicense

Когда я называю это так из моего основного сценария, он работает нормально, однако этот сценарий использует и регистрирует файл DLL во время его развертывания и блокирует его до закрытия окна PowerShell и сеанса. В конце моего основного сценария у меня есть фаза очистки, которая не может завершить свою работу из-за этой заблокированной DLL.

Поэтому я думал о том, чтобы запустить второй сценарий в новом окне и сеансе PowerShell, используя Start-Process или Invoke-Expression, но я просто не могу понять, что это правильно. Большинство переменных, через которые я передаю второй сценарий, - это не просто строки, из-за которых я, вероятно, и попадаю Они представляют собой сочетание имен пользователей и паролей (защищенных строк) вместе с $ ERCSip, который является строкой.

Должен ли я смотреть на Start-Process / Invoke-Expression или что-то еще полностью? Когда я тестировал с помощью Start-Process, у меня было определено следующее, но я не мог заставить сторону ArgumentList работать корректно (пустое поле ниже):

Start-Process "$pshome\powershell.exe" -PassThru -Wait `
-Verb RunAs -ErrorAction Stop -ArgumentList ""

Любые указатели в правильном направлении будут высоко оценены.

Спасибо!

1 Ответ

0 голосов
/ 15 сентября 2018

Я использовал что-то похожее на это в своих скриптах:

 $scriptpath="c:\pathto\deploysqlProvider"
 $a = "$scriptpath\DeployMySQLProvider.ps1 -AzCredential $asdkCreds `
-VMLocalCredential $vmLocalAdminCreds `
-CloudAdminCredential $cloudAdminCreds
-PrivilegedEndpoint $ERCSip ` "
-DefaultSSLCertificatePassword $secureVMpwd -AcceptLicense

Start-Process -Verb runas -FilePath powershell.exe -ArgumentList $a -wait -PassThru ;

Не уверен, нужно ли вам это как runas admin или нет (-verb runas).

Я бы посоветовал вам тогда посмотреть на процесс и путь Powershell.Так что, если вам придется убить этот отдельный процесс, вы можете.

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