将存储在变量中的未知参数传递到另一个powershell脚本

问题描述

我正在寻找一种从Powershell脚本中运行第二种Powershell脚本的方法,该方法将参数存储在字符串变量中。 这是一个非常简化的示例:

. $path\MainScript.ps1 -Mode $($objBMA.{Mode}) -InstallPath ${Env:ProgramFiles(x86)}

像这样,一切正常。 但是显然,您不能简单地用一个变量来替换参数字符串“ -Mode Install -InstallPath $ {Env:ProgramFiles(x86)}”,例如

$parameters = '-Mode Install -InstallPath ${Env:ProgramFiles(x86)}'
. $path\MainScript.ps1 $parameters

在这种情况下,没有变量扩展并且参数绑定无法正常运行,这意味着参数“ Mode”不是“ Install”,而是“ -Mode Install -InstallPath $ {Env:ProgramFiles(x86)}” “。

使用以下脚本“ MainScript.ps1”进行了测试:

param(
    [string]$Mode,[string]$InstallPath
)
"="*120
"Bound parameters passed to 'MainScript.ps1':"
$PSBoundParameters
"="*120
"Unbound parameters passed to 'MainScript.ps1':"
$args
"="*120

配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <MainScriptName>MainScript.ps1</MainScriptName>
  <MainScriptParameters>-Mode $($objBMA.{Mode}) -InstallPath ${Env:ProgramFiles(x86)}</MainScriptParameters>

我尝试了“ Invoke-Expression”(例如Invoke-Expression-命令'Write-Output“ $ parameters”'),但遇到了新问题-而且此命令被称为“危险”! 我想必须有一个更好的解决方案!?

背景: 我正在开发用于软件分发的帮助程序脚本,该脚本会自动运行带有记录(开始转录),错误处理等的主脚本。从配置文件中读取主脚本的参数。

解决方法

您可以在此处使用splatting:

$parameters = @{
Mode='Install'
InstallPath=${Env:ProgramFiles(x86)}
}
ScriptFile @parameters

除非您需要iex在这里

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...