Function 返回true/false的PowerShell函数

Function 返回true/false的PowerShell函数,function,powershell,return-value,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 { #

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

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


您可以在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函数返回所有未捕获的内容。例如,如果我将“做某事”的代码更改为:

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

然后返回总是成功的,因为即使文件不存在,Do Something函数也会返回一个对象数组(“Hello”,False)。查看有关PowerShell中布尔值的更多信息。

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


不要使用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"
}

看起来不错!我现在还不能尝试,但这似乎是很有逻辑的。谢谢我尝试了您的代码,但它返回“False\n\r True”。我将“Do Something”改为“Get Item dhjsiadosajdiosa”,这是一个失败命令的示例。我希望脚本返回“False”,但它返回“False\n\r True”来处理“not”/False运算符,请参阅:对于未来的读者,我会注意到这个警告。我希望我的函数返回
$false
,但我总是收到
@($false,$false)
。这是因为我没有将一个函数调用的输出捕获到一个变量中。的链接似乎已断开。有人找到更新的链接吗?编辑:可能是链接。@lolsky是的,就是那个链接。我已经更新了。谢谢。这是最好的答案
function SuccessConnectToDB {
 param([string]$constr)
 $successConnect = .\psql -c 'Select version();' $constr
    if ($successConnect) {
        return $true;
    }
    return $false;
}
if (!(SuccessConnectToDB($connstr)) {
    exit  # "Failure Connecting"
}