【问题标题】:Passing (unknown) parameters stored in a variable to another powershell script [duplicate]将存储在变量中的(未知)参数传递给另一个powershell脚本[重复]
【发布时间】:2020-10-05 09:31:39
【问题描述】:

我正在寻找一种从 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 -Command 'Write-Output "$parameters"'),却遇到了新问题 - 而且这个命令据说是“危险的”!? 我想一定有更好的解决方案!?

背景: 我正在开发一个用于软件分发的辅助脚本,它会自动运行带有日志记录(开始-转录)、错误处理等的主脚本。主脚本的参数从配置文件中读取。

【问题讨论】:

  • “配置文件”的格式是什么?您应该将其包含在您的问题中。
  • 我认为它的格式并不重要,因为我可以随时更改它的格式。反正就是这样:MainScript.ps1-Mode $($objBMA.{Mode} ) -InstallPath ${Env:ProgramFiles(x86)} [...]
  • 格式很重要,bc 现在我看到您的文件包含您通常在控制台中键入的内容。因此,除了 Invoke-Expression,您别无选择。考虑一种更抽象的格式,例如参数可以是单独的节点&lt;params&gt;&lt;param name="Mode"&gt;等,但是如果你想在值中使用表达式,你仍然需要使用Invoke-Expression。

标签: powershell parameters invoke parameterbinding


【解决方案1】:

你可以在这里使用喷溅:

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

除非你在这里需要iex

【讨论】:

  • 不幸的是,这不起作用,当参数存储在字符串变量中时,就像在从配置文件中读取它们之后的这种情况下......
  • @Marc 在测试中为我工作...
  • 对不起,我不明白。您是如何将我的问题中的字符串转换为 splatting 所需的语法的?
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 2013-08-27
  • 2012-08-02
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多