将存储在变量中的(未知)参数传递给另一个powershell脚本[重复]

thtygnil  于 2022-12-26  发布在  Shell
关注(0)|答案(1)|浏览(114)
    • 此问题在此处已有答案**:

How to manually parse a Powershell command line string(2个答案)
两年前关闭了。
我正在寻找一种从powershell脚本中运行第二个powershell脚本的方法,其中的参数存储在一个字符串变量中,下面是一个非常简化的示例:

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

像这样,一切都很正常,但显然您不能简单地将参数字符串"-ModeInstall-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>

我尝试了"调用表达式"(例如调用表达式命令'Write-Output "$parameters"'),但却遇到了新的问题-而且这个命令据说是"危险的"!?我想一定有更好的解决方案!?
背景:我正在为软件分发开发一个助手脚本,它可以自动运行主脚本,包括日志记录(Start-Transcription)、错误处理等。主脚本的参数是从配置文件中读取的。

ssm49v7z

ssm49v7z1#

您可以在此处使用泼溅:

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

除非你需要iex

相关问题