Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将存储在变量中的(未知)参数传递给另一个powershell脚本_Powershell_Parameters_Invoke_Parameterbinding - Fatal编程技术网

将存储在变量中的(未知)参数传递给另一个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

我正在寻找从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”进行测试:

配置文件:

<?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现在我看到您的文件正好包含您通常在控制台中键入的内容。所以除了调用表达式,您别无选择。考虑一种更抽象的格式,例如参数可以是单独的节点<代码> <代码>等,但是如果您想在值中使用表达式,则仍然需要使用调用表达式。