powershell - 在传递变量时将 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 ""
任何指向正确方向的指针都将不胜感激。
谢谢!
解决方案
我在脚本中使用了类似的东西:
$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 进程和路径。因此,如果您必须终止这个单独的进程,您可以。
推荐阅读
- infobip - Infobip API。如何通过api创建对象列表
- python - 透视后未保留 Python (df.to_csv) 日期格式
- sql - 选择plsql中的最后一条记录
- javascript - 'current.value' 时重做和撤消不起作用
- python - TCS DCA 问题:python 中的迷你杂货店
- node.js - Raygun 类型错误 [ERR_INVALID_ARG_TYPE]
- android - facebook sdk 中 AppLinks 的任何替代品
- r - 从 ndtv d3movie 中删除 vertex.tooltips
- c++ - 使用 C++ 中的套接字进行快速 CAN 通信
- json - 选择 json 包含的位置