Powershell Newman 运行 将 --env-var 作为字符串传递

Powershell Newman run pass --env-var as string

正在尝试通过 powershell 邮递员收集 运行,如下所示:

newman run $collPath -e $envPath $envVarsStr

在哪里 $envVarsStr 是一个包含N个动态生成的数字的字符串--env-var 例如

--env-var "Base.Url=someurl" --env-var "Password=somepass"

但是纽曼似乎忽略了我所有的--env-vars 使用额外的文件对我来说真的不是一个选项。

关于如何正确传递 env-var 字符串有什么想法吗?

您不能通过单个字符串传递外部程序应该看到的多个参数,因为PowerShell通过作为 单个 参数 的字符串,与字符串的内容无关。

相反,使用字符串数组,其中每个元素都作为单独的参数传递。

因此,如果您控制参数的创建,请使用以下内容:

# Construct an array of arguments.
# Note: No *embedded* " quoting necessary - PowerShell will double-quote on demand.
$envVarsArgs = 
  '--env-var',
  'Base.Url=someurl', # use variables or expressions as needed
  '--env-var',
  'Password=somepass'

然后调用newman如下:

# Note: @envVarsArgs would work too.
newman run $collPath -e $envPath $envVarsArgs

如果您给定一个编码多个参数的字符串,您可以自己将其拆分为一个单独的参数数组,这在最简单的情况下意味着:

newman run $collPath -e $envPath (-split $envVarsStr -replace '"')

但是,如果任何 double-quoted 子字符串包含 空格(例如 --env-var "Foo=bar none",这 不够 ),因为 -split 的一元形式仅按空格拆分。


如果你需要处理一个给定的字符串,其内嵌引号参数有空格,你可以使用Invoke-Expression with an expandable (double-quoted) string ("...")一撮。

  • 注意:Invoke-Expression (iex) 通常应该是最后的手段,因为它存在安全风险:只在您自己提供或完全信任的输入上使用它 - 参见 .
# !! See warning re Invoke-Expression above.
Invoke-Expression @"
newman run "$collPath" -e "$envPath" $envVarsStr
"@

注意使用可扩展的 here-string (@"<newline>...<newline>"@),它简化了嵌入的引用(不需要转义嵌入的 " 字符。)

另一种选择是使用 --%stop-parsing token,但是,需要您定义一个 辅助环境变量复制了你的$envVarsStr变量的值:

  • 注意:--% 有很多限制 - 请参阅
# Duplicate the string stored in $envVarsStr
# in an aux. environment variable, so it can be used with --%
$env:__aux = $envVarsStr

# Note the use of --% and the cmd.exe-style environment-variable
# reference:
newman run $collPath -e $envPath --% %__aux%