将存储在变量中的(未知)参数传递给另一个powershell脚本
我正在寻找从powershell脚本中运行第二个powershell脚本的方法,其中参数存储在字符串变量中。 下面是一个非常简单的示例:将存储在变量中的(未知)参数传递给另一个powershell脚本,powershell,parameters,invoke,parameterbinding,Powershell,Parameters,Invoke,Parameterbinding,我正在寻找从powershell脚本中运行第二个powershell脚本的方法,其中参数存储在字符串变量中。 下面是一个非常简单的示例: . $path\MainScript.ps1 -Mode $($objBMA.{Mode}) -InstallPath ${Env:ProgramFiles(x86)} 像这样一切都很好。 但显然,您不能简单地用变量替换参数字符串“-Mode Install-InstallPath${Env:ProgramFiles(x86)}”,如 $parameters
. $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”进行测试:
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<MainScriptName>MainScript.ps1</MainScriptName>
<MainScriptParameters>-Mode $($objBMA.{Mode}) -InstallPath ${Env:ProgramFiles(x86)}</MainScriptParameters>
MainScript.ps1
-模式$($objBMA.{Mode})-InstallPath${Env:ProgramFiles(x86)}
我尝试了“调用表达式”(例如调用表达式-命令“写入输出”$parameters”),结果遇到了新的问题-而且这个命令被称为“危险”!?
我想一定有更好的解决办法
背景:
我正在编写一个用于软件分发的帮助脚本,它自动运行主脚本,并记录日志(开始转录)、错误处理等。主脚本的参数是从配置文件中读取的。您可以在此处使用splatting:
$parameters = @{
Mode='Install'
InstallPath=${Env:ProgramFiles(x86)}
}
ScriptFile @parameters
除非您需要这里的iex,否则您可以在这里使用Splating:
$parameters = @{
Mode='Install'
InstallPath=${Env:ProgramFiles(x86)}
}
ScriptFile @parameters
除非您需要
iex
此处不幸的是,当参数存储在字符串变量中时,这不起作用,就像在从配置文件读取参数后的这种情况下…@Marc在测试中为我工作过…抱歉,我不明白。您是如何将我的问题中的字符串转换为splatting所需的语法的?不幸的是,当参数存储在字符串变量中时,这不起作用,就像在本例中从配置文件读取参数后…@Marc在测试中为我工作过…抱歉,我不明白。您是如何将我的问题中的字符串转换为展开所需的语法的?所述“配置文件”的格式是什么?你应该把它包括在你的问题中。我不认为它的格式很重要,因为我可以随时更改它的格式。无论如何,它就像这样:MainScript.ps1-Mode$($objBMA.{Mode})-InstallPath${Env:ProgramFiles(x86)}[…]格式很重要,bc现在我看到您的文件正好包含您通常在控制台中键入的内容。所以除了调用表达式,您别无选择。考虑一种更抽象的格式,例如参数可以是单独的节点<代码> >代码>等,但是如果您想在值中使用表达式,则仍然需要使用调用表达式。你应该把它包括在你的问题中。我不认为它的格式很重要,因为我可以随时更改它的格式。无论如何,它就像这样:MainScript.ps1-Mode$($objBMA.{Mode})-InstallPath${Env:ProgramFiles(x86)}[…]格式很重要,bc现在我看到您的文件正好包含您通常在控制台中键入的内容。所以除了调用表达式,您别无选择。考虑一种更抽象的格式,例如参数可以是单独的节点<代码> <代码>等,但是如果您想在值中使用表达式,则仍然需要使用调用表达式。