我一直在使用该网站一段时间,搜索问题和答案,试图将它们映射到我的场景,但我要么缺少某些东西,要么我想做的事情是不可能的(至少是我试图这样做的方式),因此我希望推动正确的方向。提前感谢您的阅读。
我一直在研究一个相当大的自动化项目。我的主脚本执行许多任务,通常运行良好,可靠。在脚本的一个阶段,我执行另一个PowerShell脚本,该脚本由另一个团队编写。我将脚本调用如下:
.\DeployMySQLProvider.ps1 -AzCredential $asdkCreds `
-VMLocalCredential $vmLocalAdminCreds `
-CloudAdminCredential $cloudAdminCreds
-PrivilegedEndpoint $ERCSip `
-DefaultSSLCertificatePassword $secureVMpwd -AcceptLicense
当我这样调用它时,从我的主脚本,它工作正常,但是,此脚本在部署期间使用并注册DLL文件,并锁定它直到PowerShell窗口和会话关闭。在我的主脚本结束时,我有一个清理阶段,由于这个锁定的DLL,它无法完成它的工作。
因此,我的想法是使用Start-Process或Invoke-Expression将第二个脚本启动到新的PowerShell窗口和会话中,但我似乎无法正确使用。我传递给第二个脚本的大多数变量不仅仅是字符串,这可能是我摔倒的地方。它们是用户名和密码(安全字符串)以及$ ERCSip(字符串)的混合。
我应该查看Start-Process / Invoke-Expression,还是完全不同的东西?当我使用Start-Process进行测试时,我已经定义了以下内容,但是无法让ArgumentList端正确地为我工作(下面的空白):
Start-Process "$pshome\powershell.exe" -PassThru -Wait `
-Verb RunAs -ErrorAction Stop -ArgumentList ""
任何指向正确方向的人都会非常感激。
谢谢!
我在我的脚本中使用了类似的东西:
$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 ;
不知道你是否需要它来运行管理员(-verb runas)。
我建议你然后寻找Powershell流程和路径。因此,如果你必须杀死这个单独的过程,你可以。