假设我有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"
答案 0 :(得分:1)
文档推荐的方法不是您使用呼叫运算符[&
]的方式。 [ grin ],他们在完整的命令前后加上引号,然后加一个空格,然后加上参数。在呼叫运营商的ss64页面上...
Syntax - & "[path] command" [arguments]
在没有引号的情况下,它将尝试将整个带引号的字符串解释为命令。
所以,更改此...
& ".\script1.ps1 test"
...对此...
& ".\script1.ps1" "test"