我想编写一个 PowerShell 脚本来选择 JFrog 服务连接,但该脚本的行为方式与我期望的不同。
当我jfrog config use手动运行命令时,它按预期工作:
PS C:\Users\rdepew> jfrog config use Dummy
[Info] Using server ID 'Dummy' (https://foo.jfrog.io/).
PS C:\Users\rdepew> $?
True
我希望能够使用始终返回 true 或 false 的 $? 来检测是否jfrog config use已成功执行。这个片段说明了我遇到的问题:
PS C:\Users\rdepew> if (jfrog config use Dummy) {
>> Write-Host Dummy exists
>> } else {
>> Write-Host Dummy doesnt exist but I dont believe it
>> }
[Info] Using server ID 'Dummy' (https://foo.jfrog.io/).
Dummy doesnt exist but I dont believe it
[Info] 行表明 JFrog 实际上正在使用服务器连接“Dummy”。我假设 $? 退出代码评估为真,就像在我的手动执行中一样。但我的 if/else 测试采用“if false”分支。为什么?
更多信息:如果我使用不存在的服务连接的名称,我会得到预期的行为:
PS C:\Users\rdepew> if (jfrog config use Bogus) {
>> Write-Host Bogus exists
>> } else {
>> Write-Host Bogus doesnt exist
>> }
[Error] Could not find a server with ID 'Bogus'.
Bogus doesnt exist
我不明白为什么 PSelse在 True 和 False 情况下都跳到该子句。
还有更多信息
感谢第一个答案和评论,我了解更多。我可以像这样重写我的代码段:
jfrog config add Dummy
if ($LASTEXITCODE=0) {
etc.
但是我仍然对$感到困惑?行为。从命令行,$? 行为如下:
PS C:\Users\rdepew> jfrog config use Dummy
[Info] Using server ID 'Dummy' (https://foo.jfrog.io/).
PS C:\Users\rdepew> $?
True
PS C:\Users\rdepew> jfrog config use Bogus
[Error] Could not find a server with ID 'Bogus'.
PS C:\Users\rdepew> $?
False
...这是人们所期望的。