PowerShell
PowerShell의 반환 동작
수색…
소개
함수, 스크립트 또는 스크립트 블록 일 수있는 현재 범위를 종료하는 데 사용할 수 있습니다. 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이 포함되어 있기 때문에 나머지 기능과 동일한 범위를 갖습니다.
따라서 스크립트 블록 안에 만들어진 변수에 액세스 할 수 있습니다.