수색…


소개

함수, 스크립트 또는 스크립트 블록 일 수있는 현재 범위를 종료하는 데 사용할 수 있습니다. PowerShell에서 명시적인 Return 키워드가 없거나 범위의 끝에 도달했음을 나타내는 경우에도 각 명령문의 결과가 출력으로 반환됩니다.

비고

반환 의미에 대한 자세한 내용은 TechNet의 about_Return 페이지 또는 PowerShell 프롬프트에서 get-help return 을 호출하여 읽을 수 있습니다.


더 많은 예제 / 설명이 포함 된 주목할만한 질의 응답 질문 :


MSDN의 about_return 은 간결하게 설명합니다.

Return 키워드는 함수, 스크립트 또는 스크립트 블록을 종료합니다. 특정 지점에서 범위를 종료하거나, 값을 반환하거나, 범위 끝에 도달했음을 나타내는 데 사용할 수 있습니다.

C 또는 C #과 같은 언어에 익숙한 사용자는 범위를 명시 적으로 두는 논리를 만들기 위해 Return 키워드를 사용할 수 있습니다.

Windows PowerShell에서 각 명령문의 결과는 Return 키워드가 포함 된 명령문 없이도 출력으로 반환됩니다. C 또는 C #과 같은 언어는 Return 키워드로 지정된 값만 반환합니다.

조기 퇴거

function earlyexit {
    "Hello"
    return
    "World"
}

"Hello"는 출력 파이프 라인에 배치되며, "World"는 출력 파이프 라인에 배치되지 않습니다.

잡았다! 파이프 라인으로 돌아 가기

get-childitem | foreach-object { if ($_.IsReadOnly) { return } } 

파이프 라인 cmdlet (예 : ForEach-Object , Where-Object 등)은 클로저에서 작동합니다. 여기서 리턴은 파이프 라인의 다음 항목으로 이동하며 종료 처리는 수행하지 않습니다. 처리를 종료하려면 return 대신 break 를 사용할 수 있습니다.

get-childitem | foreach-object { if ($_.IsReadOnly) { break } } 

잡았다! 원치 않는 출력 무시하기

에서 영감을 받다

function bar {
 [System.Collections.ArrayList]$MyVariable = @()
 $MyVariable.Add("a") | Out-Null
 $MyVariable.Add("b") | Out-Null
 $MyVariable
}

.NET ArrayList.Add 메서드는 추가 한 후에 컬렉션의 항목 수를 반환하기 때문에 Out-Null 이 필요합니다. 생략되면, 파이프 라인은 1, 2, "a", "b"

원하지 않는 출력을 생략하는 방법에는 여러 가지가 있습니다.

function bar
{
    # New-Item cmdlet returns information about newly created file/folder
    New-Item "test1.txt" | out-null
    New-Item "test2.txt" > $null
    [void](New-Item "test3.txt")
    $tmp = New-Item "test4.txt"
}

참고 : > $null 을 선호하는 이유에 대해 자세히 알아 보려면 [아직 작성되지 않은 주제]를 참조하십시오.

값으로 돌아 가기

( about_return 에서 바꿔서)

다음 메소드는 파이프 라인에서 동일한 값을 갖습니다.

function foo {
    $a = "Hello"
    return $a
}

function bar {
    $a = "Hello"
    $a
    return
} 

function quux {
    $a = "Hello"
    $a
} 

함수를 사용하여 작업하는 방법

함수는 다른 것으로 캡처되지 않은 모든 것을 반환합니다.
return 키워드를 사용하면 리턴 라인 다음의 모든 명령문은 실행되지 않습니다!

이렇게 :

Function Test-Function
{
    Param
    (
        [switch]$ExceptionalReturn
    )
    "Start"
    if($ExceptionalReturn){Return "Damn, it didn't work!"}
    New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
    Return "Yes, it worked!"
}

테스트 기능
돌아올 것입니다 :

  • 스타트
  • 새로 생성 된 레지스트리 키 (예상하지 못한 결과를 생성하는 명령문이 있기 때문입니다)
  • 예, 효과가있었습니다.

Test-Function -ExceptionalReturn 다음을 반환합니다.

  • 스타트
  • 젠장, 작동하지 않았어!

당신이 이렇게하면 :

Function Test-Function
{
    Param
    (
        [switch]$ExceptionalReturn
    )
    . {
       "Start"
        if($ExceptionalReturn)
        {
            $Return = "Damn, it didn't work!"
            Return
        }
        New-ItemProperty -Path "HKCU:\" -Name "test" -Value "TestValue" -Type "String"
        $Return = "Yes, it worked!"
        Return 
    } | Out-Null
    Return $Return
}

테스트 기능
돌아올 것입니다 :

  • 예, 효과가있었습니다.

Test-Function -ExceptionalReturn 다음을 반환합니다.

  • 젠장, 작동하지 않았어!

이 트릭을 사용하면 각 문장이 뱉어 낼 내용이 확실하지 않은 경우에도 반환 된 출력을 제어 할 수 있습니다.

이런 식으로 작동합니다.

.{<Statements>} | Out-Null

. 다음 scriptblock을 코드에 포함시킵니다.
{}는 스크립트 블록을 표시합니다.
| Out-Null 파이프가 Out-Null에 예상치 못한 출력을합니다 (그래서 사라졌습니다).
scriptblock이 포함되어 있기 때문에 나머지 기능과 동일한 범위를 갖습니다.
따라서 스크립트 블록 안에 만들어진 변수에 액세스 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow