about_Automatic_Variables

간단한 설명

PowerShell에서 상태 정보를 저장하고 생성하고 기본 변수에 대해 설명합니다.

개념적으로 이러한 변수의 대부분은 읽기 전용으로 간주됩니다. 기록할 수 있더라도 이전 버전과의 호환성을 위해 작성해서는 됩니다.

PowerShell의 자동 변수 목록은 다음과 같습니다.

자세한 설명

$$

세션에서 받은 마지막 줄의 마지막 토큰을 포함합니다.

$?

마지막 명령의 실행 상태 포함합니다. 마지막 명령이 성공하면 True 이고 실패한 경우 False 가 포함됩니다.

파이프라인의 여러 단계에서 실행되는 cmdlet 및 고급 함수의 경우(예: 두 블록 모두 processend, 호출 this.WriteError() 또는 $PSCmdlet.WriteError() 모든 지점에서 각각 False $PSCmdlet.ThrowTerminatingError()this.ThrowTerminatingError()설정$?).

cmdlet은 Write-Error 실행 직후 항상 False설정 $? 되지만 호출하는 함수에 대해서는 False로 설정 $?되지 않습니다.

function Test-WriteError
{
    Write-Error "Bad"
    "The `$? variable is: $?"
}

Test-WriteError
"Now the `$? variable is: $?"
Test-WriteError:
Line |
   7 |  Test-WriteError
     |  ~~~~~~~~~~~~~~~
     | Bad
The $? variable is: False
Now the $? variable is: True

후자의 목적을 $PSCmdlet.WriteError() 위해 대신 사용해야 합니다.

네이티브 명령(실행 파일) $? 의 경우 0이면 $LASTEXITCODE True설정되고 다른 값이면 False$LASTEXITCODE설정됩니다.

참고 항목

PowerShell 7까지 괄호 (...)안의 문 래핑, 하위 식 구문 $(...)또는 배열 식 @(...) 은 항상 True다시 설정 $? 됩니다. 예를 들어 (Write-Error) True표시됩니다$?. 이 동작은 PowerShell 7에서 변경되어 $? 이러한 식에서 마지막 명령 실행의 실제 성공을 항상 반영합니다.

$^

세션에서 받은 마지막 줄의 첫 번째 토큰을 포함합니다.

$_

$PSItem와 동일합니다. 파이프라인 개체의 현재 개체를 포함합니다. 파이프라인의 모든 개체에 대해 작업을 수행하는 명령에서 이 변수를 사용할 수 있습니다.

자세한 내용은 about_PSItem 참조하세요.

$args

함수, 스크립트 또는 스크립트 블록에 전달되는 선언되지 않은 매개 변수에 대한 값 배열을 포함합니다. 함수를 만들 때 키워드(keyword) 매개 변수 param 를 선언하거나 함수 이름 뒤의 괄호 안에 쉼표로 구분된 매개 변수 목록을 추가하여 매개 변수를 선언할 수 있습니다.

이벤트 동작에서 변수는 $args 처리 중인 이벤트의 이벤트 인수를 나타내는 개체를 포함합니다. 이 변수는 이벤트 등록 명령의 블록 내에서 Action 만 채워집니다. 이 변수의 값은 반환하는 PSEventArgs 개체 Get-Event 의 SourceArgs 속성에서도 찾을 있습니다.

$ConsoleFileName

세션에서 가장 최근에 사용된 콘솔 파일(.psc1)의 경로를 포함합니다. 이 변수는 PSConsoleFile 매개 변수를 사용하여 PowerShell을 시작하거나 cmdlet을 사용하여 Export-Console 스냅인 이름을 콘솔 파일로 내보낼 때 채워집니다.

매개 변수 없이 cmdlet을 Export-Console 사용하면 세션에서 가장 최근에 사용된 콘솔 파일이 자동으로 업데이트됩니다. 이 자동 변수를 사용하여 업데이트할 파일을 확인할 수 있습니다.

$EnabledExperimentalFeatures

사용하도록 설정된 실험적 기능의 이름 목록을 포함합니다.

$Error

가장 최근의 오류를 나타내는 오류 개체의 배열을 포함합니다. 가장 최근의 오류는 배열 $Error[0]의 첫 번째 오류 개체입니다.

오류가 배열에 $Error 추가되지 않도록 하려면 Ignore과 함께 ErrorAction 공통 매개 변수를 사용합니다. 자세한 내용은 about_CommonParameters를 참조하세요.

$Event

처리 중인 이벤트를 나타내는 PSEventArgs 개체를 포함합니다. 이 변수는 이벤트 등록 명령의 블록 내에서 Action 만 채워집니다(예: Register-ObjectEvent.). 이 변수의 값은 cmdlet이 Get-Event 반환하는 것과 동일한 개체입니다. 스크립트 블록에서 변수의 Event 속성(예: $Event.TimeGenerated)을 Action 사용할 수 있습니다.

$EventArgs

처리 중인 이벤트의 EventArgs에서 파생되는 첫 번째 이벤트 인수를 나타내는 개체를 포함합니다. 이 변수는 이벤트 등록 명령의 블록 내에서 Action 만 채워집니다. 이 변수의 값은 반환하는 PSEventArgs 개체 Get-Event 의 SourceEventArgs 속성에서도 찾을 있습니다.

$EventSubscriber

처리 중인 이벤트의 이벤트 구독자를 나타내는 PSEventSubscriber 개체를 포함합니다. 이 변수는 이벤트 등록 명령의 블록 내에서 Action 만 채워집니다. 이 변수의 값은 cmdlet이 Get-EventSubscriber 반환하는 것과 동일한 개체입니다.

$ExecutionContext

PowerShell 호스트의 실행 컨텍스트를 나타내는 EngineIntrinsics 개체를 포함합니다. 이 변수를 사용하여 cmdlet에서 사용할 수 있는 실행 개체를 찾을 수 있습니다.

$false

False를 포함합니다. 이 변수를 사용하여 문자열"false"을 사용하는 대신 명령 및 스크립트에서 False를 나타낼 수 있습니다. 문자열이 비어 있지 않은 문자열 또는 0이 아닌 정수로 변환되는 경우 True 로 해석될 수 있습니다.

$foreach

ForEach 루프의 열거자(결과 값 아님)를 포함합니다. 변수는 $ForEach 루프가 ForEach 실행되는 동안에만 존재하며 루프가 완료된 후에 삭제됩니다.

열거자는 루프 값을 검색하고 현재 루프 반복을 변경하는 데 사용할 수 있는 속성과 메서드를 포함합니다. 자세한 내용은 열거자 사용을 참조 하세요.

$HOME

사용자의 홈 디렉터리의 전체 경로를 포함합니다. Windows에서 이 변수는 일반적으로 C:\Users\<UserName>Windows 환경 변수의 "$env:USERPROFILE" 값을 사용합니다. Unix에서 이 변수는 환경 변수의 HOME 값을 사용합니다.

Important

Windows는 사용자 프로필의 위치를 리디렉션할 수 있습니다. 즉, 값이 $HOME .와 같지 "$env:HOMEDRIVE$env:HOMEPATH"않을 수 있습니다.

$Host

PowerShell의 현재 호스트 애플리케이션을 나타내는 개체를 포함합니다. 이 변수를 사용하여 명령에서 현재 호스트를 나타내거나 호스트의 속성(예: $Host.version 또는 또는 )을 표시하거나 $Host.CurrentCulture$Host.UI.RawUI.BackGroundColor = "Red"변경할 수 있습니다.

참고 항목

색 설정 $Host.PrivateData 이 기본 설정 변수로 $PSStyle 대체되었습니다. 자세한 내용은 about_ANSI_Terminals 참조하세요.

$input

함수에 전달되는 모든 입력을 열거하는 열거자를 포함합니다. 변수는 $input 함수, 스크립트 블록(명명되지 않은 함수) 및 스크립트 파일(저장된 스크립트 블록)에서만 사용할 수 있습니다.

  • 또는 블록이 없는 beginprocessend 함수에서 변수는 $input 함수에 대한 모든 입력의 컬렉션을 열거합니다.

  • 블록에서 begin 변수에는 $input 데이터가 없습니다.

  • 블록에서 process 변수는 $input 파이프라인의 현재 개체를 포함합니다.

  • 블록에서 end 변수는 $input 함수에 대한 모든 입력의 컬렉션을 열거합니다.

    참고 항목

    동일한 함수 또는 스크립트 블록의 블록과 end 블록 내에서 process 변수를 사용할 $input 수 없습니다.

$input 열거자이므로 해당 속성 $input 에 액세스하면 더 이상 사용할 수 없게 됩니다. 다른 변수에 저장 $input 하여 속성을 다시 사용할 $input 수 있습니다.

열거자는 루프 값을 검색하고 현재 루프 반복을 변경하는 데 사용할 수 있는 속성과 메서드를 포함합니다. 자세한 내용은 열거자 사용을 참조 하세요.

$input 이 변수는 명령줄에서 호출될 때의 -Commandpwsh 매개 변수로 지정된 명령에도 사용할 수 있습니다. 다음 예제는 Windows 명령 셸에서 실행됩니다.

echo Hello | pwsh -Command """$input World!"""

$IsCoreCLR

$True 현재 세션이 .NET Core 런타임(CoreCLR)에서 실행되고 있는지 여부를 포함합니다. 그렇지 않으면 $False.

$IsLinux

$True 현재 세션이 Linux 운영 체제에서 실행되고 있는지를 포함합니다. 그렇지 않으면 $False.

$IsMacOS

$True 현재 세션이 MacOS 운영 체제에서 실행되고 있는지를 포함합니다. 그렇지 않으면 $False.

$IsWindows

$TRUE 현재 세션이 Windows 운영 체제에서 실행되고 있는지를 포함합니다. 그렇지 않으면 $FALSE.

$LASTEXITCODE

마지막으로 실행된 네이티브 프로그램 또는 PowerShell 스크립트의 종료 코드를 포함합니다.

PowerShell 스크립트의 경우 값은 스크립트가 $LASTEXITCODE 호출된 방법 및 키워드(keyword) 사용 여부에 exit 따라 달라집니다.

  • 스크립트에서 키워드(keyword) 사용하는 exit 경우:

    $LASTEXITCODE는 키워드(keyword) 지정된 값으로 exit 설정됩니다. 자세한 내용은 about_Language_Keywords 참조하세요.

  • 스크립트가 다음과 같이 ./Test.ps1직접 호출되거나 호출 연산자(&)를 사용하여 호출되는 경우& ./Test.ps1:

    $LASTEXITCODE 은 다음과 같은 경우가 아니면 변경되지 않습니다.

    • 스크립트는 키워드(keyword) 사용하는 다른 스크립트를 호출합니다 exit .
    • 스크립트는 네이티브 명령을 호출합니다.
    • 스크립트는 키워드(keyword) 사용합니다.exit
  • File 매개 변수 $LASTEXITCODE 를 사용하여 스크립트를 호출 pwsh 하는 경우 다음으로 설정됩니다.

    • 1 예외로 인해 스크립트가 종료된 경우
    • 스크립트에 exit 사용되는 경우 키워드(keyword) 지정된 값입니다.
    • 0 스크립트가 성공적으로 완료된 경우
  • Command 매개 변수 $LASTEXITCODE 를 사용하여 스크립트를 호출 pwsh 하는 경우 다음으로 설정됩니다.

    • 1 예외로 인해 스크립트가 종료되었거나 마지막 명령의 결과가 로 설정된 $? 경우 $false
    • 0 스크립트가 성공적으로 완료되고 마지막 명령의 결과가 로 설정된 $? 경우 $true

파일 및 명령 매개 변수에 대한 자세한 내용은 about_Pwsh 참조하세요.

$Matches

변수는 $Matches-notmatch 연산자와 -match 함께 작동합니다. 스칼라 입력을 -match 또는 -notmatch 연산자에 제출하고 일치 항목을 검색하면 부울 값을 반환하고 일치하는 문자열 값의 해시 테이블로 자동 변수를 채웁니다$Matches. $Matches 연산자에서 정규식을 사용하는 경우 해시 테이블을 캡처로 -match 채울 수도 있습니다.

연산자에 -match 대한 자세한 내용은 about_Comparison_Operators 참조하세요. 정규식에 대한 자세한 내용은 about_Regular_Expressions 참조하세요.

변수는 $Matches 매개 변수가 있는 switch-Regex 에서도 작동합니다. 이 속성은 및 연산자와 -notmatch 동일한 방식으로 -match 채워집니다. 문에 대한 switch 자세한 내용은 about_Switch 참조하세요.

참고 항목

$Matches 세션에서 채워지면 다른 일치 항목으로 덮어쓸 때까지 일치하는 값을 유지합니다. 다시 사용되고 일치하는 항목을 찾을 수 없으면 -match 다시 설정 $Matches$null되지 않습니다. 이전에 일치된 값은 다른 일치 항목이 발견될 때까지 유지 $Matches 됩니다.

$MyInvocation

이름, 매개 변수, 매개 변수 값과 같은 현재 명령에 대한 정보와 명령이 시작, 호출 또는 호출된 방법에 대한 정보(예: 현재 명령을 호출한 스크립트의 이름)를 포함합니다.

$MyInvocation 는 스크립트, 함수 및 스크립트 블록에 대해서만 채워집니다. 함수 이름($MyInvocation.MyCommand.Name)과 같이 현재 스크립트에서 반환되는 $MyInvocation System.Management.Automation.InvocationInfo 개체의 정보를 사용하여 현재 명령을 식별할 수 있습니다. 이는 현재 스크립트의 이름을 찾는 데 유용합니다.

PowerShell 3.0 MyInvocation 부터 다음과 같은 새 속성이 있습니다.

  • PSScriptRoot - 현재 명령을 호출한 스크립트의 전체 경로를 포함합니다. 이 속성의 값은 호출자가 스크립트인 경우에만 채워집니다.
  • PSCommandPath - 현재 명령을 호출한 스크립트의 전체 경로 및 파일 이름을 포함합니다. 이 속성의 값은 호출자가 스크립트인 경우에만 채워집니다.

$PSScriptRoot 자동 변수 및 자동 변수와 $PSCommandPath 달리 자동 변수의 $MyInvocation PSScriptRootPSCommandPath 속성에는 현재 스크립트가 아닌 호출자 또는 호출 스크립트에 대한 정보가 포함됩니다.

$NestedPromptLevel

현재 프롬프트 수준을 포함합니다. 값 0은 원래 프롬프트 수준을 나타냅니다. 값은 중첩된 수준을 입력할 때 증가되고 종료할 때 감소됩니다.

예를 들어 PowerShell은 메서드를 사용할 때 중첩된 명령 프롬프트를 표시합니다 $Host.EnterNestedPrompt . PowerShell은 PowerShell 디버거에서 중단점에 도달할 때 중첩된 명령 프롬프트도 제공합니다.

중첩 프롬프트를 입력하면 PowerShell에서 현재 명령을 일시 중지하고 실행 컨텍스트를 저장한 다음 변수 값을 $NestedPromptLevel 증분합니다. 추가 중첩된 명령 프롬프트(최대 128개 수준)를 만들거나 원래 명령 프롬프트로 돌아가려면 명령을 완료하거나 입력합니다 exit.

변수는 $NestedPromptLevel 프롬프트 수준을 추적하는 데 도움이 됩니다. 항상 표시되도록 이 값을 포함하는 대체 PowerShell 명령 프롬프트를 만들 수 있습니다.

$null

$null은 null 또는 빈 값을 포함하는 자동 변수입니다. 이 변수를 사용하여 명령 및 스크립트에서 정의되지 않은 값이나 정의되지 않은 값을 나타낼 수 있습니다.

PowerShell은 $null 값 또는 자리 표시자가 있는 개체로 처리되므로 값 컬렉션에서 빈 값을 나타내는 데 사용할 $null 수 있습니다.

예를 들어 컬렉션에 포함되는 경우 $null 개체 중 하나로 계산됩니다.

$a = "one", $null, "three"
$a.count
3

변수를 $null cmdlet에 ForEach-Object 파이프하는 경우 다른 개체와 마찬가지로 해당 변수에 대한 $null값이 생성됩니다.

"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three

따라서 매개 변수 값이 없음을 의미하는 데 사용할 $null 수 없습니다. 매개 변수 값은 $null 기본 매개 변수 값을 재정의합니다.

그러나 PowerShell은 변수를 $null 자리 표시자로 처리하므로 무시된 경우 $null 작동하지 않는 다음 스크립트와 같은 스크립트에서 사용할 수 있습니다.

$calendar = @($null, $null, "Meeting", $null, $null, "Team Lunch", $null)
$days = "Sunday","Monday","Tuesday","Wednesday","Thursday",
        "Friday","Saturday"
$currentDay = 0
foreach($day in $calendar)
{
    if($day -ne $null)
    {
        "Appointment on $($days[$currentDay]): $day"
    }

    $currentDay++
}
Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch

$PID

현재 PowerShell 세션을 호스팅하는 프로세스의 PID(프로세스 식별자)를 포함합니다.

$PROFILE

현재 사용자 및 현재 호스트 애플리케이션에 대한 PowerShell 프로필의 전체 경로를 포함합니다. 이 변수를 사용하여 명령에서 프로필을 나타낼 수 있습니다. 예를 들어 명령에서 프로필을 사용하여 프로필이 만들어졌는지 여부를 확인할 수 있습니다.

Test-Path $PROFILE

또는 명령에서 프로필을 만들 수 있습니다.

New-Item -ItemType file -Path $PROFILE -Force

명령에서 사용하여 notepad.exe 프로필을 열 수 있습니다.

notepad.exe $PROFILE

$PSBoundParameters

스크립트 또는 함수에 전달되는 매개 변수의 사전과 해당 현재 값을 포함합니다. 이 변수는 스크립트 또는 함수와 같이 매개 변수가 선언되는 범위에서만 값을 가집니다. 매개 변수의 현재 값을 표시하거나 변경하거나 매개 변수 값을 다른 스크립트 또는 함수에 전달하는 데 사용할 수 있습니다.

이 예제에서 Test2 함수는 Test1 함수에 전달합니다$PSBoundParameters. 키 $PSBoundParameters 형식으로 표시됩니다.

function Test1 {
   param($a, $b)

   # Display the parameters in dictionary format.
   $PSBoundParameters
}

function Test2 {
   param($a, $b)

   # Run the Test1 function with $a and $b.
   Test1 @PSBoundParameters
}
Test2 -a Power -b Shell
Key   Value
---   -----
a     Power
b     Shell

$PSCmdlet

실행 중인 cmdlet 또는 고급 함수를 나타내는 개체를 포함합니다.

cmdlet 또는 함수 코드에서 개체의 속성과 메서드를 사용하여 사용 조건에 응답할 수 있습니다. 예를 들어 ParameterSetName 속성에는 사용 중인 매개 변수 집합의 이름이 포함되고 ShouldProcess 메서드는 WhatIfConfirm 매개 변수를 cmdlet에 동적으로 추가합니다.

자동 변수에 $PSCmdlet 대한 자세한 내용은 about_Functions_CmdletBindingAttributeabout_Functions_Advanced 참조하세요.

$PSCommandPath

실행 중인 스크립트의 전체 경로 및 파일 이름을 포함합니다. 이 변수는 모든 스크립트에서 유효합니다.

$PSCulture

PowerShell 7 $PSCulture 부터 현재 PowerShell Runspace(세션)의 문화권을 반영합니다. PowerShell Runspace에서 문화권이 변경되면 해당 Runspace의 $PSCulture 값이 업데이트됩니다.

문화권은 숫자, 통화 및 날짜와 같은 항목의 표시 형식을 결정하며 System.Globalization.CultureInfo 개체에 저장됩니다. 컴퓨터의 문화권을 표시하는 데 사용합니다 Get-Culture . $PSCulture 에는 Name 속성의 값이 포함됩니다.

$PSDebugContext

디버깅하는 동안 이 변수에는 디버깅 환경에 대한 정보가 포함됩니다. 그렇지 않으면 null 값이 포함됩니다. 따라서 이를 사용하여 디버거가 제어할 수 있는지 여부를 확인할 수 있습니다. 채워지면 중단점InvocationInfo 속성이 있는 PsDebugContext 개체가 포함됩니다. InvocationInfo 속성에는 Location 속성을 비롯한 몇 가지 유용한 속성이 있습니다. Location 속성은 디버깅 중인 스크립트의 경로를 나타냅니다.

$PSEdition

에 동일한 값을 $PSVersionTable.PSEdition포함합니다. 이 변수는 모듈 매니페스트 파일에서 사용할 수 있는 반면 $PSVersionTable 에는 사용할 수 없습니다.

$PSHOME

일반적으로 $env:windir\System32\PowerShell\v1.0 Windows 시스템에서 PowerShell에 대한 설치 디렉터리의 전체 경로를 포함합니다. PowerShell 파일의 경로에서 이 변수를 사용할 수 있습니다. 예를 들어 다음 명령은 개념 도움말 항목에서 변수라는 단어를 검색합니다.

Select-String -Pattern Variable -Path $pshome\*.txt

$PSItem

$_와 동일합니다. 파이프라인 개체의 현재 개체를 포함합니다. 파이프라인의 모든 개체에 대해 작업을 수행하는 명령에서 이 변수를 사용할 수 있습니다.

자세한 내용은 about_PSItem 참조하세요.

$PSScriptRoot

실행 중인 스크립트의 부모 디렉터리의 전체 경로를 포함합니다.

PowerShell 2.0에서 이 변수는 스크립트 모듈(.psm1)에서만 유효합니다. PowerShell 3.0부터 모든 스크립트에서 유효합니다.

$PSSenderInfo

사용자 ID 및 원래 컴퓨터의 표준 시간대를 포함하여 PSSession을 시작한 사용자에 대한 정보를 포함합니다. 이 변수는 PSSessions에서만 사용할 수 있습니다.

변수에는 $PSSenderInfo 기본적으로 원래 세션의 속성만 $PSVersionTable 포함하는 사용자 구성 가능한 속성 ApplicationArguments가 포함됩니다. ApplicationArguments 속성에 데이터를 추가하려면 cmdlet의 ApplicationArguments 매개 변수를 New-PSSessionOption 사용합니다.

$PSUICulture

운영 체제에서 구성된 UI(사용자 인터페이스) 문화권의 이름을 포함합니다. UI 문화권은 메뉴 및 메시지와 같은 사용자 인터페이스 요소에 사용되는 텍스트 문자열을 결정합니다. System.Globalization.CultureInfo의 값입니다.Current 시스템의 UICulture.Name 속성입니다. 시스템에 대한 System.Globalization.CultureInfo 개체를 얻으려면 cmdlet을 Get-UICulture 사용합니다.

$PSVersionTable

현재 세션에서 실행 중인 PowerShell 버전에 대한 세부 정보를 표시하는 읽기 전용 해시 테이블을 포함합니다. 표에는 다음 항목이 포함되어 있습니다.

  • PSVersion - PowerShell 버전 번호
  • PSEdition 이 속성은 PowerShell 4 이하의 '데스크톱' 값과 완전한 기능을 갖춘 Windows 버전의 PowerShell 5.1 값을 줍니다. 이 속성에는 PowerShell 6 이상 및 Windows Nano Server 또는 Windows IoT와 같은 축소된 사용 공간 버전의 Windows PowerShell 5.1 값 Core 이 있습니다.
  • GitCommitId - GitHub에서 원본 파일의 커밋 ID
  • OS - PowerShell이 실행 중인 운영 체제에 대한 설명입니다.
  • 플랫폼 - 운영 체제가 실행되는 플랫폼입니다. Linux 및 macOS의 값은 Unix입니다. $IsMacOs$IsLinux를 확인합니다.
  • PSCompatibleVersions - 현재 버전과 호환되는 PowerShell 버전
  • PSRemotingProtocolVersion - PowerShell 원격 관리 프로토콜의 버전입니다.
  • SerializationVersion - serialization 메서드의 버전
  • WSManStackVersion - WS-Management 스택의 버전 번호

$PWD

현재 PowerShell Runspace에 대한 현재 디렉터리 위치의 전체 경로를 나타내는 경로 개체를 포함합니다.

참고 항목

PowerShell은 프로세스당 여러 Runspace를 지원합니다. 각 Runspace에는 고유한 현재 디렉터리가 있습니다. 이는 프로세스 [System.Environment]::CurrentDirectory의 현재 디렉터리와 동일하지 않습니다.

$Sender

이 이벤트를 생성한 개체를 포함합니다. 이 변수는 이벤트 등록 명령의 작업 블록 내에서만 채워집니다. 이 변수의 값은 반환하는 PSEventArgs 개체 Get-EventSender 속성에서도 찾을 수 있습니다.

$ShellId

현재 셸의 식별자를 포함합니다.

$StackTrace

가장 최근 오류에 대한 스택 추적을 포함합니다.

$switch

문의 결과 값 Switch 이 아닌 열거자를 포함합니다. 변수는 $switch 문이 실행되는 동안 Switch 에만 존재하며 문이 실행을 완료하면 삭제 switch 됩니다. 자세한 내용은 about_Switch 참조하세요.

열거자는 루프 값을 검색하고 현재 루프 반복을 변경하는 데 사용할 수 있는 속성과 메서드를 포함합니다. 자세한 내용은 열거자 사용을 참조 하세요.

$this

변수는 $this 클래스 자체의 인스턴스를 참조하도록 클래스를 확장하는 스크립트 블록에 사용됩니다.

PowerShell의 ETS(Extensible Type System)를 사용하면 스크립트 블록을 사용하여 클래스에 속성을 추가할 수 있습니다. 스크립트 속성 또는 스크립트 메서드 $this 를 정의하는 스크립트 블록에서 변수는 확장 중인 클래스의 개체 인스턴스를 참조합니다. 예를 들어 PowerShell은 ETS를 사용하여 FileInfo 클래스에 BaseName 속성을 추가합니다.

PS> Get-ChildItem .\README.md | Get-Member BaseName | Format-List

TypeName   : System.IO.FileInfo
Name       : BaseName
MemberType : ScriptProperty
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt 0)
             {$this.Name.Remove($this.Name.Length - $this.Extension.Length
             )}else{$this.Name};}

자세한 내용은 about_Types.ps1xml을 참조하세요.

PowerShell 클래스에서 변수는 $this 클래스 자체의 인스턴스 개체를 참조하여 클래스에 정의된 속성 및 메서드에 대한 액세스를 허용합니다. 자세한 내용은 about_Classes 참조하세요.

$this 이 변수는 스크립트 블록을 이벤트 처리기의 대리자로 사용하는 .NET 이벤트 클래스에서도 사용됩니다. 이 시나리오 $this 에서는 이벤트 발신자라고 하는 이벤트를 발생시키는 개체를 나타냅니다.

$true

True를 포함합니다. 이 변수를 사용하여 명령 및 스크립트에서 True를 나타낼 수 있습니다.

열거자 사용

$input, $foreach$switch 변수는 모두 포함하는 코드 블록에서 처리되는 값을 반복하는 데 사용되는 열거자입니다.

열거자에는 반복을 진행하거나 다시 설정하거나 반복 값을 검색하는 데 사용할 수 있는 속성과 메서드가 포함되어 있습니다. 열거자를 직접 조작하는 것은 모범 사례로 간주되지 않습니다.

  • 루프 내에서 흐름 제어 키워드(keyword) 중단계속하는 것이 좋습니다.

  • 파이프라인 입력을 허용하는 함수 내에서 ValueFromPipeline 또는 ValueFromPipelineByPropertyName 특성과 함께 매개 변수를 사용하는 것이 가장 좋습니다.

    자세한 내용은 about_Functions_Advanced_Parameters 참조하세요.

MoveNext

MoveNext 메서드는 열거자를 컬렉션의 다음 요소로 이동합니다. 열거자가 컬렉션의 끝을 통과한 경우 열거자가 성공적으로 진행 False 되면 MoveNext가 반환 True 됩니다.

참고 항목

MoveNext에서 반환된 부울 값은 출력 스트림으로 전송됩니다. 출력을 출력에 형식 캐스팅하거나 Out-Null[void] 파이핑하여 출력을 표시하지 않을 수 있습니다.

$input.MoveNext() | Out-Null
[void]$input.MoveNext()

Reset

메서드는 Reset 컬렉션의 첫 번째 요소 앞에 있는 초기 위치로 열거자를 설정합니다.

Current

이 속성은 Current 열거자의 현재 위치에 있는 컬렉션 또는 파이프라인의 요소를 가져옵니다.

MoveNext가 호출될 때까지 속성은 Current 동일한 속성을 계속 반환합니다.

예제

예제 1: $input 변수 사용

다음 예제에서 변수에 $input 액세스하면 다음에 프로세스 블록이 실행될 때까지 변수를 지웁니다. 메서드를 Reset 사용하면 변수가 $input 현재 파이프라인 값으로 다시 설정됩니다.

function Test
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        "`tInput: $input"
        "`tAccess Again: $input"
        $input.Reset()
        "`tAfter Reset: $input"
    }
}

"one","two" | Test
Iteration: 0
    Input: one
    Access Again:
    After Reset: one
Iteration: 1
    Input: two
    Access Again:
    After Reset: two

프로세스 블록은 액세스하지 않더라도 변수를 $input 자동으로 진행합니다.

$skip = $true
function Skip
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        if ($skip)
        {
            "`tSkipping"
            $skip = $false
        }
        else
        {
            "`tInput: $input"
        }
    }
}

"one","two" | Skip
Iteration: 0
    Skipping
Iteration: 1
    Input: two

예제 2: 프로세스 블록 외부에서 $input 사용

프로세스 블록 외부에서 변수는 $input 함수에 파이프된 모든 값을 나타냅니다.

  • 변수에 $input 액세스하면 모든 값이 지워지게 됩니다.
  • 메서드는 Reset 전체 컬렉션을 다시 설정합니다.
  • 속성이 Current 채워지지 않습니다.
  • MoveNext 메서드는 컬렉션을 고급화할 수 없으므로 false를 반환합니다.
    • MoveNext를 호출하면 변수가 지워지게 $input 됩니다.
Function All
{
    "All Values: $input"
    "Access Again: $input"
    $input.Reset()
    "After Reset: $input"
    $input.MoveNext() | Out-Null
    "After MoveNext: $input"
}

"one","two","three" | All
All Values: one two three
Access Again:
After Reset: one two three
After MoveNext:

예제 3: $input 사용.Current 속성

Current 속성을 사용하면 메서드를 사용하지 Reset 않고 현재 파이프라인 값에 여러 번 액세스할 수 있습니다. 프로세스 블록은 MoveNext 메서드를 자동으로 호출하지 않습니다.

MoveNext를 명시적으로 호출하지 않는 한 속성이 Current 채워지지 않습니다. 해당 Current 값을 지우지 않고 프로세스 블록 내에서 속성을 여러 번 액세스할 수 있습니다.

function Current
{
    begin
    {
        $i = 0
    }

    process
    {
        "Iteration: $i"
        $i++
        "`tBefore MoveNext: $($input.Current)"
        $input.MoveNext() | Out-Null
        "`tAfter MoveNext: $($input.Current)"
        "`tAccess Again: $($input.Current)"
    }
}

"one","two" | Current
Iteration: 0
    Before MoveNext:
    After MoveNext: one
    Access Again: one
Iteration: 1
    Before MoveNext:
    After MoveNext: two
    Access Again: two

예제 4: $foreach 변수 사용

변수와 $input 달리 변수는 $foreach 직접 액세스할 때 항상 컬렉션의 모든 항목을 나타냅니다. Current 속성을 사용하여 현재 컬렉션 요소에 액세스하고 Reset MoveNext 메서드와 MoveNext 메서드를 사용하여 해당 값을 변경합니다.

참고 항목

루프의 각 반복은 foreach MoveNext 메서드를 자동으로 호출합니다.

다음 루프는 두 번만 실행됩니다. 두 번째 반복에서는 반복이 완료되기 전에 컬렉션이 세 번째 요소로 이동됩니다. 두 번째 반복 후에는 더 이상 반복할 값이 없으며 루프가 종료됩니다.

MoveNext 속성은 컬렉션($Num)을 반복하도록 선택한 변수에 영향을 주지 않습니다.

$i = 0
foreach ($num in ("one","two","three"))
{
    "Iteration: $i"
    $i++
    "`tNum: $num"
    "`tCurrent: $($foreach.Current)"

    if ($foreach.Current -eq "two")
    {
        "Before MoveNext (Current): $($foreach.Current)"
        $foreach.MoveNext() | Out-Null
        "After MoveNext (Current): $($foreach.Current)"
        "Num hasn't changed: $num"
    }
}
Iteration: 0
        Num: one
        Current: one
Iteration: 1
        Num: two
        Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num hasn't changed: two

메서드를 Reset 사용하면 컬렉션의 현재 요소가 다시 설정됩니다. 다음 예제에서는 메서드가 호출되므로 처음 두 요소를 두 번Reset 반복합니다. 처음 두 루프 후에 if 문이 실패하고 루프는 일반적으로 세 가지 요소를 모두 반복합니다.

Important

이로 인해 무한 루프가 발생할 수 있습니다.

$stopLoop = 0
foreach ($num in ("one","two", "three"))
{
    ("`t" * $stopLoop) + "Current: $($foreach.Current)"

    if ($num -eq "two" -and $stopLoop -lt 2)
    {
        $foreach.Reset()
        ("`t" * $stopLoop) + "Reset Loop: $stopLoop"
        $stopLoop++
    }
}
Current: one
Current: two
Reset Loop: 0
        Current: one
        Current: two
        Reset Loop: 1
                Current: one
                Current: two
                Current: three

예제 5: $switch 변수 사용

변수에는 $switch 변수와 정확히 동일한 규칙이 있습니다 $foreach . 다음 예제에서는 모든 열거자 개념을 보여 줍니다.

참고 항목

MoveNext 메서드 이후에 문이 없더라도 NotEvaluated 케이스가 실행되지 않는 break 방법을 확인합니다.

$values = "Start", "MoveNext", "NotEvaluated", "Reset", "End"
$stopInfinite = $false
switch ($values)
{
    "MoveNext" {
        "`tMoveNext"
        $switch.MoveNext() | Out-Null
        "`tAfter MoveNext: $($switch.Current)"
    }
    # This case is never evaluated.
    "NotEvaluated" {
        "`tAfterMoveNext: $($switch.Current)"
    }

    "Reset" {
        if (!$stopInfinite)
        {
            "`tReset"
            $switch.Reset()
            $stopInfinite = $true
        }
    }

    default {
        "Default (Current): $($switch.Current)"
    }
}
Default (Current): Start
    MoveNext
    After MoveNext: NotEvaluated
    Reset
Default (Current): Start
    MoveNext
    After MoveNext: NotEvaluated
Default (Current): End

참고 항목