web-dev-qa-db-ja.com

true / falseを返すPowerShell関数

私はPowerShellの使用にかなり慣れており、PowerShell関数に値を返そうとする試みについて誰かが何か入力をするのではないかと考えていました。

値を返す関数を作成したい:

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

次に、上記の関数がtrueの場合にのみ実行される2番目の関数があります。

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

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です。

注意点の1つは、PowerShell関数がキャプチャされていないすべてのものを返すことです。たとえば、Do-Somethingのコードを次のように変更すると、

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

ファイルが存在しない場合でも、Do-Something関数は( "Hello"、False)のオブジェクト配列を返すため、戻り値は常にSuccessになります。 PowerShellのブール値の詳細については、ブール値と演算子を参照してください。

8
antonyoni

あなたはこのようなことをするでしょう。 Testコマンドは、自動変数「$?」を使用します。最後のコマンドが正常に完了した場合は、true/falseを返します(詳細については、about_Automatic_Variablesトピックを参照してください)。

Function Test-Something
 {
     Do-Something
     $?
 }

 Function OnlyTrue
 {
     if(Test-Something) { ... }
 }
5
Shay Levy

応答が非常に遅れましたが、Powershell 5では同じ問題が発生しました。戻り値として1と0を使用できます。次に、それをブール値に変換するか、単に "-eq 1"または0を使用します

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

[bool](Test)