【问题标题】:Why is the argument not taking effect?为什么论证没有生效?
【发布时间】:2019-05-17 08:43:42
【问题描述】:

假设我有 script1.ps1,它从 Vault 获取 REST 响应,其中包含 Dev, Test, and Prod 环境的一堆键/值。

script1 中,我有一个参数来传递可选环境。

param(
    [String]$environment
)

如果没有环境作为参数在命令行传递,其值默认设置为dev

确保 script1 正在获取值,我测试了以下内容(来自我的开发服务器/环境)

PS> script1.ps1

从 Vault 中返回给我的开发键/值...好

PS> script1.ps1 test

从保险库返回给我的 TEST 键/值......很好,所以脚本工作得很好

现在考虑script2.ps1,我在其中调用script1.ps1 来更改开发环境中的一些连接。

这是script2

$response = & ".\script1.ps1" | ConvertFrom-Json
$response[1]

并运行 script2...

PS> script2.ps1

返回给我来自保险库的开发键/值,因为记住 script1 默认设置 $environment 为 dev 如果没有传递任何参数...好

但是,当我现在尝试这个时:

$response = & ".\script1.ps1 test" | ConvertFrom-Json
$response[1]

我没有得到任何回报!

这是为什么呢??

这有什么问题吗? & ".\script1.ps1 test"

【问题讨论】:

  • $env 是一个保留名称。除了预期的功能之外,您永远不应该将它用于任何其他用途 - 作为环境“驱动”诸如 $env:temp 之类的东西。
  • @Lee_Dailey 我应该注意我在这里使用了 $env SO,但在脚本中我将它作为 $environment。我会修改我的帖子
  • 啊! [grin] 很高兴知道...没有其他事情对我来说很突出,所以我会继续潜伏。
  • 我只看了 ss64 和 & "call" 运算符。它说 >>> Syntax - & "[path] command" [arguments] 咧嘴]
  • @Lee_Dailey OMG 就是这样!!!!!!哈哈,你太棒了! [咧嘴]

标签: powershell


【解决方案1】:

您使用呼叫运算符 [&] 的方式不是文档推荐的方式。 [grin] 他们在完整的命令周围加上引号,然后是空格,然后是参数。来自呼叫运营商的 ss64 页面...

Syntax - & "[path] command" [arguments]

如果没有不同的引号,它将尝试将整个带引号的字符串解释为命令。

所以,改变这个......

& ".\script1.ps1 test"

...到这个...

& ".\script1.ps1" "test"

【讨论】:

    猜你喜欢
    • 2019-10-02
    • 2018-08-06
    • 2019-11-02
    • 2014-02-19
    • 1970-01-01
    • 2017-02-20
    • 2018-12-19
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多