다음을 통해 공유


about_Automatic_Variables

간단한 설명

PowerShell에서 상태 정보를 저장하고 생성 및 유지 관리하는 변수에 대해 설명합니다.

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

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

자세한 설명

$$

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

$?

마지막 명령의 실행 상태를 포함합니다. 마지막 명령이 성공하면 True 이고 실패한 경우 False 가 포함됩니다. 구문 분석 오류는 실행되지 않으므로 값 $?에 영향을 주지 않습니다.

파이프라인의 여러 단계에서 실행되는 cmdlet 및 고급 함수의 경우(예: 두 블록 모두 processend, 호출 this.WriteError() 또는 $PSCmdlet.WriteError() 모든 지점에서 각각 False $?설정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이면 True$LASTEXITCODE설정되고 다른 값이면 False설정됩니다.

참고 항목

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

$^

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

$_

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

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

$args

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

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

$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 속성에서도 찾을 수 있습니다.

$EventSubscriber

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

$ExecutionContext

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

$false

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

$foreach

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

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

$HOME

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

Important

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

$Host

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

참고 항목

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

$input

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

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

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

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

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

    참고 항목

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

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

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

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

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

$IsCoreCLR

$true 세션이 current .NET Core 런타임(CoreCLR)에서 실행되는지 여부를 포함합니다. 그렇지 않으면 $false.

$IsLinux

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

$IsMacOS

current 세션이 macOS 운영 체제에서 실행되는 경우 $true 포함합니다. 그렇지 않으면 $false.

$IsWindows

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

$LASTEXITCODE

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

PowerShell 스크립트의 경우 값은 스크립트가 $LASTEXITCODE 호출된 방법과 키워드가 exit 사용되었는지 여부에 따라 달라집니다.

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

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

  • 스크립트가 다음과 같이 ./Test.ps1직접 호출되거나 호출 연산자경우&:

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

    • 스크립트는 키워드를 사용하는 다른 스크립트를 호출합니다.exit
    • 스크립트는 네이티브 명령을 호출합니다.
    • 스크립트는 키워드를 사용합니다.exit
  • Filepwsh경우 다음으로 설정됩니다.

    • 1 예외로 인해 스크립트가 종료된 경우
    • 스크립트에 exit 사용되는 경우 키워드로 지정된 값입니다.
    • 0 스크립트가 성공적으로 완료된 경우
  • Commandpwsh경우 다음으로 설정됩니다.

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

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

$Matches

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

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

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

참고 항목

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

$MyInvocation

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

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

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

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

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

$NestedPromptLevel

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

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

중첩 프롬프트를 입력하면 PowerShell에서 명령을 일시 중지 current 하고 실행 컨텍스트를 저장한 다음 변수 값을 $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 세션을 호스팅 current 하는 프로세스의 PID(프로세스 식별자)를 포함합니다.

$PROFILE

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

Test-Path $PROFILE

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

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

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

notepad.exe $PROFILE

$PSBoundParameters

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

이 예제에서 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(세션)의 current 문화권을 반영합니다. PowerShell Runspace에서 문화권이 변경되면 해당 Runspace의 $PSCulture 값이 업데이트됩니다.

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

$PSDebugContext

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

$PSEdition

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

$PSHOME

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

Select-String -Pattern Help -Path $PSHOME\en-US\*.txt

$PSItem

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

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

$PSScriptRoot

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

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

$PSSenderInfo

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

변수에는 $PSSenderInfo 기본적으로 원래 세션의 속성만 포함하는 사용자 구성 가능한 속성 $PSVersionTable가 포함됩니다. ApplicationArguments 속성에

$PSUICulture

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

$PSVersionTable

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

  • PSVersion - PowerShell 버전 번호
  • PSEdition 이 속성은 PowerShell 4 이하의 'Desktop' 값과 전체 기능을 갖춘 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 - 버전과 current 호환되는 PowerShell 버전
  • PSRemotingProtocolVersion - PowerShell 원격 관리 프로토콜의 버전입니다.
  • SerializationVersion - serialization 메서드의 버전
  • WSManStackVersion - WS-Management 스택의 버전 번호

$PWD

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

참고 항목

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

$Sender

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

$ShellId

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

$StackTrace

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

$switch

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

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

$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 변수는 모두 포함하는 코드 블록에서 처리되는 값을 반복하는 데 사용되는 열거자입니다.

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

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

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

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

MoveNext

MoveNext 메서드는 열거자를 컬렉션의 다음 요소로 이동합니다. 가 반환 True 됩니다.

참고 항목

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

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

Reset

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

Current

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

MoveNextCurrent속성은 동일한 속성을 계속 반환합니다.

예제

예제 1: $input 변수 사용

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

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 메서드를 current 사용하지 Reset 않고 파이프라인 값에 여러 번 액세스할 수 있습니다. 프로세스 블록은 MoveNext 메서드를 자동으로 호출하지 않습니다.

MoveNextCurrent하지 않는 한 속성이 채워지지 않습니다. 해당 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 이 속성을 사용하여 컬렉션 요소에 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 사용하면 컬렉션의 current 요소가 다시 설정됩니다. 다음 예제에서는 메서드가 호출되므로 처음 두 요소를 두 번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

참고 항목