首页 > 解决方案 > 在传递变量时将 PowerShell 脚本启动到新窗口

问题描述

我已经使用该网站一段时间了,搜索问题和答案,试图将它们映射到我的场景,但我要么遗漏了什么,要么我想做的事情是不可能的(至少我正在尝试这样做),因此我希望朝着正确的方向前进。提前感谢您的阅读。

我一直在从事一个相当大的自动化项目。我的主脚本执行许多任务,并且通常运行良好且可靠。在脚本的一个阶段,我执行另一个由另一个团队编写的 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 ""

任何指向正确方向的指针都将不胜感激。

谢谢!

标签: powershell

解决方案


我在脚本中使用了类似的东西:

 $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 进程和路径。因此,如果您必须终止这个单独的进程,您可以。


推荐阅读