【问题标题】:Launch PowerShell script into new window while passing variables在传递变量时将 PowerShell 脚本启动到新窗口
【发布时间】:2018-09-15 05:29:04
【问题描述】:

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

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我会试一试并报告,谢谢!不过要检查一下,我认为 $ERCSip ` 之后的双引号应该在 -AcceptLicense?
    • 再次感谢。所以我进行了测试,似乎至少有一个与 -DefaultSSLCertificatePassword 和我的 $secureVMpwd 相关的问题。运行上述示例后,针对我的环境进行了修改,新窗口打开,并提示我输入密码(用户名已预先填写为 System.Management.Automation.PSCredential)。通常,在没有 Start-Process 的情况下运行此脚本时,它会在没有提示的情况下运行。查看脚本生成的成绩单,显示......
    • ... 主机应用程序:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\Users\AzureStackAdmin\Desktop\DeployMySQLProvider.ps1 -AzCredential System.Management.Automation。 PSCredential -VMLocalCredential System.Management.Automation.PSCredential -CloudAdminCredential System.Management.Automation.PSCredential -PrivilegedEndpoint AzS-ERCS01 -DefaultSSLCertificatePassword System.Security.SecureString -AcceptLicense
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多