PowerShell函数返回true / false

时间:2013-08-09 14:05:01

标签: function powershell return-value

我使用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...
 }

4 个答案:

答案 0 :(得分:7)

您可以在PowerShell中使用return语句:

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

答案 1 :(得分:5)

你会做这样的事情。 Test命令使用自动变量'$?'。如果最后一个命令成功完成,则返回true / false(有关详细信息,请参阅about_Automatic_Variables主题):

Function Test-Something
 {
     Do-Something
     $?
 }

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

答案 2 :(得分:2)

不要使用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 :(得分:0)

答案很延迟,但在Powershell 5中也有同样的问题。 您可以使用1和0作为返回值。然后您可以将其转换为布尔值或只使用 “ -eq 1”或0

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

[bool](Test)