PowerShell函数返回true/false

23

我对使用PowerShell相当新,想知道有没有人可以提供关于如何使PowerShell函数返回值的建议。

我想创建一些能够返回值的函数:

 Function Something
 {
     # Do a PowerShell cmd here: if the command succeeded, return true
     # If not, then return false
 }

然后有一个第二个函数,只有在上述函数为真时才会运行:

 Function OnlyTrue
 {
     # Do a PowerShell cmd here...
 }

处理“not”/false运算符,请参见:https://dev59.com/JWsz5IYBdhLWcg3wJUYo - storm_m2138
5个回答

29
不要使用True或False,而是使用$true或$false。
function SuccessConnectToDB {
 param([string]$constr)
 $successConnect = .\psql -c 'Select version();' $constr
    if ($successConnect) {
        return $true;
    }
    return $false;
}

然后以一个漂亮干净的方式来称呼它:
if (!(SuccessConnectToDB($connstr))) {
    exit  # "Failure Connecting"
}

3
这是最好的答案。 - Mike Q

15

你可以在 PowerShell 中使用返回语句:

Function Do-Something {
    $return = Test-Path c:\dev\test.txt
    return $return
}

Function OnlyTrue {
    if (Do-Something) {
        "Success"
    } else {
        "Fail"
    }
}

OnlyTrue

如果文件存在,输出结果为Success,如果不存在则为Fail

需要注意的是,PowerShell函数会返回没有被捕获的所有内容。例如,如果我将Do-Something的代码更改为:

Function Do-Something {
    "Hello"
    $return = Test-Path c:\dev\test.txt
    return $return
}

然后返回值将始终是“Success”,因为即使文件不存在,Do-Something函数也会返回一个对象数组("Hello",False)。请参阅关于 PowerShell 中布尔值的更多信息,请查看 Boolean Values and Operators


3
对于未来读者,我被“警告”所困扰。我本来期望我的函数返回$false,但是我总是收到@($false,$false)。这是因为我没有将一个函数调用的输出捕获到一个变量中。 - kkuilla
看起来 Boolean Values and Operators 的链接已经失效了。有人找到了更新的链接吗?编辑:这个链接 可能是正确的链接。 - lolsky
@lolsky 是的,就是那个。我已经更新了。谢谢。 - antonyoni

6

你可以这样做。Test命令使用自动变量'$?'。如果上一个命令成功执行,它会返回true/false(有关更多信息,请参阅about_Automatic_Variables主题):

Function Test-Something
 {
     Do-Something
     $?
 }

 Function OnlyTrue
 {
     if(Test-Something) { ... }
 }

看起来不错!我暂时还没试过,但它似乎是相当坚实的逻辑。谢谢! - scapegoat17
1
我尝试了你的代码,但它返回“False \n\r True”。我将“Do-Something”更改为“Get-Item dhjsiadosajdiosa”,这是一个失败的命令示例。我期望脚本返回“False”,但它返回“False \n\r True”。 - Kappacake

2

非常抱歉回复晚了,但我在PowerShell 5中遇到了同样的问题。 您可以使用1和0作为返回值。然后您可以将其转换为布尔值或仅使用“-eq 1”或0。

Function Test
{
   if (Test-Path c:\test.txt){
      return 0
   }else{
      return 1
   }
}

[bool](Test)

-1
怎么样用参数调用一个布尔函数? 函数ServiceIsRunning { param ( $ServiceName ) $arrService = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue if($arrService.Status -eq "Running") { echo " (+) 服务正在运行 - $ServiceName" return $true } elseif($arrService.Status -eq "Stopped") { echo " (-) 服务已停止 - $ServiceName - $serviceDown" return $false } else { echo " (-) 服务未知 - $ServiceName" return $true } }
我该如何调用这个函数? if( ServiceIsRunning -ServiceName "myService" ) ... -> 无效!

目前来看,你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好答案的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接