为什么论点没有生效?

时间:2019-05-16 23:28:05

标签: powershell

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

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

param(
    [String]$environment
)

如果在命令行中没有将任何环境作为arg传递,则其值默认设置为dev

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

PS> script1.ps1

那使我从Vault中获得了开发键/值...好

PS> script1.ps1 test

那是我从库中返回的测试键/值...很好,所以脚本可以正常工作

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

这是script2

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

并运行script2 ...

PS> script2.ps1

这使我从Vault返回了开发键/值,因为请记住,如果没有传递参数,默认情况下,script1默认情况下会将$environment设置为dev ...好

但是,当我现在尝试:

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

我什么也没拿回来!

那是为什么?

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

1 个答案:

答案 0 :(得分:1)

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

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

在没有引号的情况下,它将尝试将整个带引号的字符串解释为命令。

所以,更改此...

& ".\script1.ps1 test"

...对此...

& ".\script1.ps1" "test"