다음을 통해 공유


3. 기본 개념

편집 참고 사항

중요하다

Windows PowerShell 언어 사양 3.0 2012년 12월에 게시되었으며 Windows PowerShell 3.0을 기반으로 합니다. 이 사양은 PowerShell의 현재 상태를 반영하지 않습니다. 현재 상태를 반영하도록 이 설명서를 업데이트할 계획은 없습니다. 이 설명서는 기록 참조를 위해 여기에 제공됩니다.

사양 문서는 Microsoft 다운로드 센터에서 Microsoft Word 문서로 사용할 수 있습니다. https://www.microsoft.com/download/details.aspx?id=36389 해당 Word 문서는 Microsoft Learn에서 프레젠테이션용으로 변환되었습니다. 변환하는 동안 Docs 플랫폼의 서식을 수용하기 위해 일부 편집 변경이 이루어졌습니다. 일부 오타 및 사소한 오류가 수정되었습니다.

3.1 공급자 및 드라이브

공급자 명령줄에서 쉽게 액세스할 수 없는 데이터 및 구성 요소에 액세스할 수 있습니다. 데이터는 파일 시스템 드라이브와 유사한 일관된 형식으로 표시됩니다.

공급자가 노출하는 데이터는 드라이브표시되며 디스크 드라이브와 마찬가지로 경로를 통해 데이터에 액세스합니다. 각 공급자에 대한 기본 제공 cmdlet은 공급자 드라이브의 데이터를 관리합니다.

PowerShell에는 다양한 유형의 데이터 저장소에 액세스하기 위한 다음과 같은 기본 제공 공급자 집합이 포함되어 있습니다.

공급자 드라이브 이름 설명 참조 번호
별명 별명: PowerShell 별칭 §3.1.1
환경 환경: 환경 변수 §3.1.2
파일 시스템 A:, B:, C:, ... 디스크 드라이브, 디렉터리 및 파일 §3.1.3
기능 기능: PowerShell 함수 §3.1.4
변수 변수: PowerShell 변수 §3.1.5

Windows PowerShell:

공급자 드라이브 이름 설명
증명서 인증서: 디지털 서명용 x509 인증서
레지스트리 HKLM: (HKEY_LOCAL_MACHINE, 로컬 컴퓨터 등록), HKCU: (HKEY_CURRENT_USER, 현재 사용자 등록) Windows 레지스트리
WSMan WSMan: WS-Management 구성 정보

다음 cmdlet은 공급자 및 드라이브를 처리합니다.

  • Get-PSProvider: 하나 이상의 공급자에 대한 정보를 가져옵니다.
  • Get-PSDrive: 하나 이상의 드라이브에 대한 정보를 가져옵니다.

공급자를 나타내는 개체의 형식은 §4.5.1설명되어 있습니다. 드라이브를 나타내는 개체의 형식은 §4.5.2설명되어 있습니다.

3.1.1 별칭

별칭는 명령에 부여되는 또 다른 이름입니다. 명령에는 여러 별칭이 있을 수 있으며 원래 이름과 모든 별칭을 서로 바꿔 사용할 수 있습니다. 별칭을 다시 할당할 수 있습니다. 별칭은 항목(§3.3)입니다.

별칭을 다른 별칭에 할당할 수 있습니다. 그러나 새 별칭은 원래 명령의 별칭이 아닙니다.

공급자 별칭은 별칭을 나타내는 개체만 포함하는 단순 네임스페이스입니다. 변수에 자식 항목이 없습니다.

PowerShell에는 기본 별칭 모음이 포함되어 있습니다.

다음 cmdlet은 별칭을 처리합니다.

  • New-Alias: 별칭을 만듭니다.
  • 별칭: 하나 이상의 별칭을 만들거나 변경합니다.
  • 별칭 가져오기: 하나 이상의 별칭에 대한 정보를 가져옵니다.
  • Export-Alias: 파일로 하나 이상의 별칭을 내보낸다

New-Alias사용하여 명령에 대한 별칭을 만드는 경우 해당 명령에 대한 매개 변수를 해당 별칭에 포함할 수 없습니다. 그러나 별칭: 네임스페이스의 변수에 직접 할당할 경우 매개 변수를 포함할 수 있습니다.

메모

그러나 원하는 모든 매개 변수를 사용하여 해당 명령의 호출을 포함하는 것 이상의 작업을 수행하지 않는 함수를 만들고 해당 함수에 별칭을 할당하는 것은 간단한 문제입니다.

별칭을 나타내는 개체의 형식은 §4.5.4설명되어 있습니다.

별칭 개체는 드라이브의 별칭(§3.1)에 저장됩니다.

3.1.2 환경 변수

PowerShell 환경 공급자를 사용하면 운영 체제 환경 변수를 검색, 추가, 변경, 지우기 및 삭제할 수 있습니다.

공급자 환경은 환경 변수를 나타내는 개체만 포함하는 플랫 네임스페이스입니다. 변수에 자식 항목이 없습니다.

환경 변수의 이름은 등호(=)를 포함할 수 없습니다.

환경 변수를 변경하면 현재 세션에만 영향을 줍니다.

환경 변수는 항목(§3.3)입니다.

환경 변수를 나타내는 개체의 형식은 §4.5.6설명되어 있습니다.

환경 변수 개체는 드라이브 Env: (§3.1)에 저장됩니다.

3.1.3 파일 시스템

PowerShell FileSystem 공급자를 사용하면 디렉터리와 파일을 만들고, 열고, 변경하고, 삭제할 수 있습니다.

FileSystem 공급자는 기본 파일 시스템을 나타내는 개체를 포함하는 계층 구조 네임스페이스입니다.

파일은 A:, B:, C:와 같은 이름의 드라이브에 저장됩니다(§3.1). 경로 표기법(§3.4)을 사용하여 디렉터리 및 파일에 액세스합니다.

디렉터리 또는 파일은 항목(§3.3)입니다.

3.1.4 함수

PowerShell 함수 공급자를 사용하면 함수(§8.10) 및 필터(§8.10.1)를 검색, 추가, 변경, 지우기 및 삭제할 수 있습니다.

공급자 함수는 함수 및 필터 개체만 포함하는 플랫 네임스페이스입니다. 함수나 필터에는 자식 항목이 없습니다.

함수를 변경하면 현재 세션에만 영향을 줍니다.

함수는 항목(§3.3)입니다.

함수를 나타내는 개체의 형식은 §4.5.10설명되어 있습니다. 필터를 나타내는 개체의 형식은 §4.5.11설명되어 있습니다.

함수 개체는 드라이브 함수: (§3.1)에 저장됩니다.

3.1.5 변수

변수는 PowerShell 언어로 직접 정의하고 조작할 수 있습니다.

공급자 변수는 변수를 나타내는 개체만 포함하는 플랫 네임스페이스입니다. 변수에 자식 항목이 없습니다.

다음 cmdlet은 변수도 처리합니다.

변수는 항목(§3.3)이므로 대부분의 항목 관련 cmdlet에서 조작할 수 있습니다.

변수를 나타내는 개체의 형식은 §4.5.3설명되어 있습니다.

변수 개체는 드라이브 변수에 저장됩니다. (§3.1).

3.2 작업 위치

현재 작업 위치는 명령이 가리키는 기본 위치입니다. 명령이 호출될 때 명시적 경로(§3.4)가 제공되지 않는 경우 사용되는 위치입니다. 이 위치에는 현재 드라이브포함됩니다.

PowerShell 호스트에는 여러 드라이브가 있을 수 있습니다. 이 경우 각 드라이브에는 고유한 현재 위치가 있습니다.

디렉터리 없이 드라이브 이름을 지정하면 해당 드라이브의 현재 위치가 암시됩니다.

현재 작업 위치를 스택에 저장한 다음 새 위치로 설정할 수 있습니다. 나중에 해당 스택에서 저장된 위치를 복원하고 현재 작업 위치를 만들 수 있습니다. 위치 스택에는 두 가지 종류가 있습니다. 기본 작업 위치 스택및 0개 이상의 사용자 정의로 명명된 작업 위치 스택 . 세션이 시작되면 기본 작업 위치 스택은 현재 작업 위치 스택입니다. 그러나 명명된 작업 위치 스택은 현재 작업 위치 스택으로 만들 수 있습니다.

다음 cmdlet은 위치를 처리합니다.

  • 설정 위치: 현재 작업 위치를 설정합니다.
  • Get-Location: 지정된 드라이브의 현재 작업 위치 또는 지정된 스택의 작업 위치를 결정합니다.
  • Push-Location: 지정된 위치 스택의 맨 위에 현재 작업 디렉토리를 저장합니다.
  • Pop-Location: 지정된 위치 스택의 맨 위에서 현재 작업 위치를 복원합니다.

작업 위치 및 작업 위치 스택을 나타내는 개체 형식은 §4.5.5설명되어 있습니다.

3.3 항목

항목은 별칭(§3.1.1), 변수(§3.1.5), 함수(§3.1.4), 환경 변수(§3.1.2), 또는 파일 시스템의 파일이나 디렉터리(§3.1.3)입니다.

다음 cmdlet은 항목을 처리합니다.

  • 새 항목: 새 항목을 만듭니다.
  • 집합 항목: 하나 이상의 항목의 값을 변경합니다.
  • Get-Item: 지정된 위치에 있는 항목을 가져옵니다.
  • Get-ChildItem: 지정된 위치에서 항목 및 자식 항목을 가져옵니다.
  • 항목 복사: 한 위치에서 다른 위치로 하나 이상의 항목을 복사합니다.
  • 이동 항목: 한 위치에서 다른 위치로 하나 이상의 항목 이동
  • 항목 이름 바꾸기: 항목 이름 변경
  • Invoke-Item: 하나 이상의 항목에 대한 기본 작업을 수행합니다.
  • 항목 지우기: 하나 이상의 항목의 내용을 삭제하지만 항목을 삭제하지는 않습니다(참조).
  • 항목 제거: 지정된 항목을 삭제합니다.

다음 cmdlet은 항목의 콘텐츠를 처리합니다.

디렉터리를 나타내는 개체의 형식은 §4.5.17설명되어 있습니다. 파일을 나타내는 개체의 형식은 §4.5.18설명되어 있습니다.

3.4 경로 이름

PowerShell 공급자를 통해 액세스할 수 있는 데이터 저장소의 모든 항목은 경로 이름으로 고유하게 식별할 수 있습니다. 경로 이름은 항목 이름, 항목이 위치한 컨테이너와 하위 컨테이너, 그리고 이 컨테이너들에 액세스하는 PowerShell 드라이브의 조합입니다.

경로 이름은 정규화된 형식과 상대 형식 중 하나로 나뉩니다. 완전히 정의된 경로 이름은 경로를 구성하는 모든 요소로 이루어져 있습니다. 다음 구문은 정규화된 경로 이름의 요소를 보여줍니다.

구문 정의의 ~opt~ 표기법은 어휘 엔터티가 구문에서 선택 사항임을 나타냅니다.

path:
    provider~opt~   drive~opt~   containers~opt~   item

provider:
    module~opt~   provider   ::

module:
    module-name   \

drive:
    drive-name   :

containers:
    container   \
    containers container   \

모듈 이름 부모 모듈을 참조합니다.

공급자 데이터 저장소에 액세스하는 PowerShell 공급자를 참조합니다.

드라이브는 특정 PowerShell 공급자가 지원하는 PowerShell 드라이브를 의미합니다.

컨테이너는 다른 컨테이너를 포함할 수 있으며, 그 컨테이너들도 또 다른 컨테이너를 포함할 수 있습니다. 그렇게 계속해서 중첩되며, 최종 컨테이너에는 항목이있습니다. 컨테이너는 데이터 저장소에 있는 계층적 순서로 지정해야 합니다.

경로 이름의 예는 다음과 같습니다.

E:\Accounting\InvoiceSystem\Production\MasterAccount\MasterFile.dat

경로의 마지막 요소에 다른 요소가 포함되어 있으면 컨테이너 요소입니다. 그렇지 않으면 리프 요소입니다.

경우에 따라 정규화된 경로 이름이 필요하지 않습니다. 상대 경로 이름으로 충분합니다. 상대 경로 이름 현재 작업 위치를 기반으로 합니다. PowerShell을 사용하면 현재 작업 위치를 기준으로 해당 위치에 따라 항목을 식별할 수 있습니다. 상대 경로 이름에는 일부 특수 문자의 사용이 포함됩니다. 다음 표에서는 이러한 각 문자에 대해 설명하고 상대 경로 이름과 정규화된 경로 이름의 예를 제공합니다. 테이블의 예제는 C:\Windows로 설정되는 현재 작업 디렉터리를 기반으로 합니다.

기호 설명 상대 경로 정규화된 경로
. 현재 작업 위치 .\System C:\Windows\System
.. 현재 작업 위치의 부모 ..\Program Files C:\Program Files
\ 현재 작업 위치의 드라이브 루트 \Program Files C:\Program Files
없음 특수 문자 없음 System C:\Windows\System

명령에서 경로 이름을 사용하려면 해당 이름을 정규화된 경로 또는 상대 경로 이름으로 입력합니다.

다음 cmdlet은 경로를 처리합니다.

  • Convert-Path: PowerShell 경로에서 PowerShell 공급자 경로로 경로를 변환합니다.
  • Join-Path: 경로와 하위 경로를 하나의 경로로 결합합니다.
  • Resolve-Path: 경로의 와일드카드 문자를 해결합니다.
  • 분할 경로: 경로의 지정된 부분을 반환합니다.
  • 테스트 경로: 경로의 요소가 존재하는지 또는 경로가 올바른 형식인지 확인합니다.

일부 cmdlet(예: Add-Content )과 Copy-Item는 파일 필터를 사용합니다. 파일 필터 경로 집합에서 선택하기 위한 조건을 지정하는 메커니즘입니다.

확인된 경로를 나타내는 개체 형식은 §4.5.5설명되어 있습니다. 경로는 종종 문자열로 조작됩니다.

3.5 범위

3.5.1 소개

이름은 변수, 함수, 별칭, 환경 변수 또는 드라이브를 나타낼 수 있습니다. 동일한 이름은 스크립트의 여러 위치에서 다른 항목을 나타낼 수 있습니다. 이름이 각기 다른 항목을 나타내는 경우, 그 이름은 해당 범위로 불리는 스크립트 텍스트 영역 내에서만 표시됩니다. 동일한 이름으로 표시되는 항목의 범위가 다르거나 다른 이름 공간에 있습니다.

범위는 중첩될 수 있습니다. 이 경우 외부 범위를 부모 범위라고 하며, 중첩된 범위는 해당 부모 범위 자식 범위에 . 이름의 범위는 프라이빗으로 설정되지 않는 한, 그것이 정의된 범위와 모든 자식 범위입니다. 자식 범위 내에서 정의된 이름은 부모 범위에서 동일한 이름으로 정의된 항목을 숨깁니다.

점 원본 표기법(§3.5.5)을 사용하지 않는 한 다음 각 항목은 새 범위를 만듭니다.

  • 스크립트 파일
  • 스크립트 블록
  • 함수 또는 필터

다음 예제를 고려하세요.

# Start of script
$x = 2; $y = 3
Get-Power $x $y

# Function defined in script
function Get-Power([int]$x, [int]$y) {
    if ($y -gt 0) {
        return $x * (Get-Power $x (--$y))
    } else {
        return 1
    }
}
# End of script

스크립트에서 만든 $x 변수 및 $y 범위는 해당 스크립트 내에 정의된 함수를 포함하여 해당 스크립트의 본문입니다. 함수 Get-Power 이름이 같은 두 매개 변수를 정의합니다. 각 함수에는 자체 범위가 있으므로 이러한 변수는 부모 범위에 정의된 변수와 다르며 부모 범위에서 해당 변수를 숨깁니다. 함수 범위는 스크립트 범위 내에 중첩됩니다.

함수는 재귀적으로 자신을 호출합니다. 이렇게 할 때마다 각각 고유한 변수 $x$y을 가진 또 다른 중첩된 범위를 만듭니다.

다음은 더 복잡한 예로, 중첩된 범위와 이름 재사용도 보여 줍니다.

# start of script scope
$x = 2              # top-level script-scope $x created
                    # $x is 2
F1                  # create nested scope with call to function F1
                    # $x is 2
F3                  # create nested scope with call to function F3
                    # $x is 2

function F1 {       # start of function scope
                    # $x is 2
    $x = $true      # function-scope $x created
                    # $x is $true

    & {             # create nested scope with script block
                    # $x is $true
        $x = 12.345 # scriptblock-scope $x created
                    # $x is 12.345
    }               # end of scriptblock scope, local $x goes away

                    # $x is $true
    F2              # create nested scope with call to function F2
                    # $x is $true
}                   # end of function scope, local $x goes away

function F2 {       # start of function scope
                    # $x is $true
    $x = "red"      # function-scope $x created
                    # $x is "red"
}                   # end of function scope, local $x goes away

function F3 {       # start of function scope
                    # $x is 2
    if ($x -gt 0) {
                    # $x is 2
        $x = "green"
                    # $x is "green"
    }               # end of block, but not end of any scope
                    # $x is still "green"
}                   # end of function scope, local $x goes away
# end of script scope

3.5.2 범위 이름 및 숫자

PowerShell은 다음 범위를 지원합니다.

  • 전역: 최상위 수준 범위입니다. 모든 자동 및 기본 설정 변수는 이 범위에 정의됩니다. 전역 범위는 다른 모든 범위의 부모 범위이며, 다른 모든 범위는 전역 범위의 자식 범위입니다.

  • 로컬: 스크립트, 스크립트 블록 또는 함수 내의 모든 실행 지점에서 현재 범위입니다. 모든 범위는 로컬 범위일 수 있습니다.

  • 스크립트: 이 범위는 실행되는 각 스크립트 파일에 대해 존재합니다. 스크립트 범위는 해당 범위 내에서 만든 모든 범위의 부모 범위입니다. 스크립트 블록은 자체 스크립트 범위를 않습니다. 대신 스크립트 범위는 가장 가까운 상위 스크립트 파일의 범위입니다. 모듈 범위와 같은 항목은 없지만 스크립트 범위는 동등한 값을 제공합니다.

이름은 비공개로 선언할 수 있으며, 이 경우 부모 범위 외부는 물론 자식 범위에서도 보이지 않습니다. 프라이빗의 개념은 별도의 범위가 아닙니다. 쓰기 가능한 위치로 사용되는 경우 이름을 숨기는 추가와 함께 로컬 범위에 대한 별칭입니다.

범위는 숫자로 참조될 수 있으며, 이는 한 범위가 다른 범위에 대해 상대적으로 어떤 위치에 있는지를 설명합니다. 범위 0은 로컬 범위를, 범위 1은 1세대 상위 범위를, 범위 2는 2세대 상위 범위를 나타내는 등입니다. (범위 번호는 변수를 조작하는 cmdlet에서 사용됩니다.)

3.5.3 변수 이름 범위

다음 프로덕션에서 보여 주듯이 6가지 범위 중 하나를 사용하여 변수 이름을 지정할 수 있습니다.

variable-scope:
    Global:
    Local:
    Private:
    Script:
    Using:
    Workflow:
    variable-namespace

범위는 선택 사항입니다. 다음 표에서는 가능한 모든 컨텍스트에서 각각의 의미를 보여 줍니다. 또한 범위가 명시적으로 지정되지 않은 경우에도 범위를 표시합니다.

범위 한정자 스크립트 파일 내에서 스크립트 블록 내의 함수 내
글로벌 전역 범위 전역 범위 전역 범위
스크립트 가장 가까운 상위 스크립트 파일의 범위, 가장 가까운 상위 스크립트 파일이 없는 경우에는 전역 범위 가장 가까운 상위 스크립트 파일의 범위, 가장 가까운 상위 스크립트 파일이 없는 경우에는 전역 범위 가장 가까운 상위 스크립트 파일의 범위, 가장 가까운 상위 스크립트 파일이 없는 경우에는 전역 범위
비공개 전역/스크립트/로컬 범위 로컬 범위 로컬 범위
로컬 전역/스크립트/로컬 범위 로컬 범위 로컬 범위
Using 정의된 구현 정의된 구현 정의된 구현
워크플로 정의된 구현 정의된 구현 정의된 구현
없음 전역/스크립트/로컬 범위 로컬 범위 로컬 범위

(§3.1.5)에 나열된 cmdlet 제품군을 사용할 때 변수 범위 정보를 지정할 수도 있습니다. 특히 매개변수 Scope, Option PrivateOption AllScope에 대해 자세한 내용을 참조하십시오.

Using: 범위 한정자는 cmdlet(예Start-JobInvoke-Command: inlinescript-statement) 내에서 스크립트를 실행하는 동안 다른 범위에 정의된 변수에 액세스하는 데 사용됩니다. 예를 들어:

$a = 42
Invoke-Command --ComputerName RemoteServer { $Using:a } # returns 42
workflow foo
{
    $b = "Hello"
    inlinescript { $Using:b }
}
foo # returns "Hello"

범위 워크플로는 병렬 문 또는 시퀀스 문과 함께 사용하여 워크플로에 정의된 변수에 액세스합니다.

3.5.4 함수 이름 범위

함수 이름에는 네 가지 범위 중 하나가 있을 수 있으며 해당 이름의 표시 유형은 변수(§3.5.3)와 동일합니다.

3.5.5 점 원본 표기법

스크립트 파일, 스크립트 블록 또는 함수가 다른 스크립트 파일, 스크립트 블록 또는 함수 내에서 실행되는 경우 실행된 스크립트 파일은 새 중첩된 범위를 만듭니다. 예를 들어

Script1.ps1
& "Script1.ps1"
& { ... }
FunctionA

그러나 점 원본 표기법 사용하면 명령이 실행되기 전에 새 범위가 만들어지지 않으므로 자체 로컬 범위에 적용한 추가/변경 내용이 현재 범위에 대신 적용됩니다. 예를 들어

. Script2.ps1
. "Script2.ps1"
. { ... }
. FunctionA

3.5.6 모듈

최상위 스크립트 파일이 계층 구조 중첩된 범위 트리의 루트에 있는 것처럼 각 모듈(§3.14)도 마찬가지입니다. 그러나 기본적으로 모듈에서 내보낸 이름만 가져오기 컨텍스트 내에서 이름으로 사용할 수 있습니다. cmdlet 의 Global 매개 변수를 사용하면 Import-Module에서 내보낸 이름의 가시성을 높일 수 있습니다.

3.6 읽기 전용 및 상수 속성

변수 및 별칭은 여러 속성을 포함하는 개체에 의해 설명됩니다. 이러한 속성은 두 개의 cmdlet 패밀리(§3.1.5, §3.1.1)에 의해 설정되고 조작됩니다. 이러한 속성 중 하나는 Options이며, Option 매개 변수를 사용하여 ReadOnly 또는 Constant로 설정할 수 있습니다. ReadOnly로 표시된 변수 또는 별칭을 제거할 수 있으며 Force 매개 변수를 지정하면 해당 속성을 변경할 수 있습니다. 그러나 상수로 표시된 변수 또는 별칭은 제거할 수 없으며 해당 속성도 변경할 수 없습니다.

3.7 메서드 오버로드 및 호출 해결

3.7.1 소개

§1에 설명된 대로 실행 환경에서 사용할 수 있는 외부 프로시저(PowerShell 이외의 언어로 작성)를메서드라고 합니다.

해당 매개 변수의 수 및 형식과 함께 메서드의 이름을 해당 메서드의 서명집합적으로 호출합니다. (서명에는 메서드의 반환 형식이 포함되지 않습니다.) 실행 환경에서는 각각 다른 서명이 제공된 동일한 이름의 여러 메서드를 형식에 포함할 수 있습니다. 일부 메서드의 여러 버전이 정의되면 해당 메서드는 오버로드된합니다. 예를 들어 수학 형식(§4.3.8)에는 지정된 숫자의 절대값을 계산하는 Abs메서드 집합이 포함되어 있습니다. 여기서 지정된 숫자는 여러 형식 중 하나를 가질 수 있습니다. 해당 집합의 메서드에는 다음과 같은 서명이 있습니다.

Abs(decimal)
Abs(float)
Abs(double)
Abs(int)
Abs(long)
Abs(SByte)
Abs(Int16)

이 경우 모든 메서드의 인수 수는 동일합니다. 해당 서명은 인수 형식에 따라 다릅니다.

또 다른 예로는 배열(§4.3.2) 형식이 포함됩니다. 여기에는 각 배열의 시작 부분이나 지정된 요소에서 시작하여 한 배열에서 다른 배열로 요소 범위를 복사하는 Copy라는 메서드 집합이 포함되어 있습니다. 해당 집합의 메서드에는 다음과 같은 서명이 있습니다.

Copy(Array, Array, int)
Copy(Array, Array, long)
Copy(Array, int, Array, int, int)
Copy(Array, long, Array, long, long)

이 경우 서명은 인수 형식에 따라 다르며 경우에 따라 인수 번호도 다릅니다.

오버로드된 메서드에 대한 대부분의 호출에서 전달된 인수의 수와 형식은 오버로드 중 하나와 정확히 일치하며 선택한 메서드는 분명합니다. 그러나 그렇지 않은 경우 호출할 오버로드된 버전(있는 경우)을 확인하는 방법이 있어야 합니다. 예를 들어

[Math]::Abs([byte]10) # no overload takes type byte
[array]::Copy($source, 3, $dest, 5L, 4) # both int and long indexes

다른 예로는 많은 오버로드된 메서드가 있는 문자열 형식(예: system.String)이 있습니다.

PowerShell에는 오버로드된 서명과 정확히 일치하지 않는 메서드 호출을 확인하는 규칙이 있지만 PowerShell 자체는 오버로드된 메서드를 정의하는 방법을 제공하지 않습니다.

메모

편집기 참고: PowerShell 5.0은 스크립트 기반 클래스를 정의하는 기능을 추가했습니다. 이러한 클래스는 오버로드된 메서드를 포함할 수 있습니다.

3.7.2 메서드 오버로드 해결

인수 식 목록이 있는 메서드 호출(§7.1.3)과 후보 메서드 집합이경우(즉, 호출할 수 있는 메서드) 최상의 메서드를 선택하는 메커니즘을 오버로드 확인호출됩니다.

적용 가능한 후보 메서드 집합(§3.7.3)을 감안할 때 해당 집합에서 가장 좋은 방법이 선택됩니다. 집합에 하나의 메서드만 포함된 경우 해당 메서드가 가장 좋은 방법입니다. 그렇지 않으면 가장 좋은 방법은 §3.7.4표시된 규칙을 사용하여 지정된 인수 목록과 관련하여 다른 모든 메서드보다 더 나은 방법입니다. 다른 모든 메서드보다 더 나은 메서드가 하나도 없는 경우 메서드 호출이 모호하고 오류가 보고됩니다.

가장 좋은 방법은 호출되는 컨텍스트에서 액세스할 수 있어야 합니다. 예를 들어 PowerShell 스크립트는 프라이빗 또는 보호된 메서드를 호출할 수 없습니다.

정적 메서드 호출에 가장 적합한 방법은 정적 메서드여야 하며 인스턴스 메서드 호출에 가장 적합한 방법은 인스턴스 메서드여야 합니다.

3.7.3 적용 가능한 메서드

다음 중 하나가 true일 때 메서드를 인수 목록 A에 대해 적용 가능한 메서드라고 합니다.

  • A의 인수 수는 메서드가 허용하는 매개 변수 수와 동일합니다.
  • 메서드에는 M 필수 매개 변수와 N 선택적 매개 변수가 있으며 A의 인수 수는 M보다 크거나 같지만 N보다 작습니다.
  • 메서드는 가변 개수의 인수를 허용하고 A의 인수 수는 메서드가 허용하는 매개 변수 수보다 큽니다.

적절한 수의 인수 외에도 A의 각 인수는 인수의 매개 변수 전달 모드와 일치해야 하며 인수 형식은 매개 변수 형식과 일치해야 합니다. 그렇지 않으면 인수 형식에서 매개 변수 형식으로의 변환이 있어야 합니다.

인수 형식이 ref(§4.3.6)이면 해당 매개 변수도 ref여야 하며 변환을 위해 인수 형식은 ref 인수의 속성 값 형식입니다.

인수 형식이 ref경우 해당 매개 변수는 out대신 ref 수 있습니다.

메서드가 가변 개수의 인수를 허용하는 경우 이 메서드는 정규 형식 또는 확장된 양식적용할 수 있습니다. A의 인수 수가 메서드가 허용하는 매개 변수 수와 동일하고 마지막 매개 변수가 배열인 경우 폼은 가능한 두 변환 중 하나의 순위에 따라 달라집니다.

  • A의 마지막 인수 형식을 마지막 매개 변수의 배열 형식으로 변환할 때의 순위입니다.
  • A의 마지막 인수 형식에서 마지막 매개 변수에 대한 배열 형식의 요소 형식으로 변환하는 순위입니다.

배열 형식으로의 첫 번째 변환이 두 번째 변환(배열의 요소 형식)보다 더 나은 경우 메서드는 일반 형식으로 적용할 수 있으며, 그렇지 않으면 확장된 형식으로 적용할 수 있습니다.

매개 변수보다 인수가 더 많은 경우 이 메서드는 확장된 형식으로만 적용할 수 있습니다. 확장된 형식으로 적용하려면 마지막 매개 변수에 배열 형식이 있어야 합니다. 이 메서드는 마지막 매개 변수가 A의 일치하지 않는 각 인수를 설명하기에 충분한 매개 변수로 대체된 동등한 메서드로 대체됩니다. 각 추가 매개 변수 형식은 원래 메서드의 마지막 매개 변수에 대한 배열 형식의 요소 형식입니다. 적용 가능한 메서드에 대한 위의 규칙은 이 새 메서드 및 인수 목록 A에 적용됩니다.

3.7.4 더 나은 메서드

인수 식 집합 을 포함한 인수 목록 A가 주어졌을 때, 매개 변수 유형이 인 두 개의 애플리케이션 메서드 가 있다면, 에 대한의 누적 변환 순위가 보다 좋을 경우 보다 더 나은 메서드로 정의됩니다.

변환의 누적 순위는 다음과 같이 계산됩니다. 각 변환은 매개변수의 수에 따라 다른 가치를 지니며, E~1~의 가치는 N, E~2~의 가치는 N-1, E~N~의 가치는 1입니다. E~X~ P~X~ 변환이 E~X~Q~X~변환보다 더 나은 경우 M~P~ N-X+1을 누적합니다. 그렇지 않으면 M~Q~ N-X+1을 누적합니다. M~P~M~Q~의 값이 같으면, 다음 동점 해결 규칙이 순서대로 사용됩니다.

  • 매개변수 형식 간의 변환 누적 순위는 인수 형식을 무시하고, 이전 순위와 유사한 방식으로 계산됩니다. 따라서 P~1~Q~1~과 비교되고, P~2~Q~2~과, P~N~Q~N~와 비교됩니다. 인수가 $null인 경우 또는 매개 변수의 형식이 숫자 형식이 아닌 경우에는 비교를 건너뜁니다. 인수 변환 E~X~P~X~로 변환될 때 정보가 손실되지만, Q~X~로 변환될 때는 정보가 손실되지 않거나, 그 반대의 경우에도 비교는 건너뜁니다. 매개 변수 변환 형식을 비교한 경우 P~X~Q~X~ 변환이 Q~X~P~X~변환보다 더 나은 경우 M~P~ N-X+1을 누적합니다. 그렇지 않으면 M~Q~ N-X+1을 누적합니다. 이 타이 브레이킹 규칙은 변환에서 정보가 손실되지 않는 경우 가장 구체적인 메서드(즉, 데이터 형식이 가장 작은 매개 변수를 가진 메서드)을 선호하며, 변환으로 정보가 손실될 경우 가장 일반적인 메서드(즉, 가장 큰 데이터 형식을 사용하는 매개 변수를 가진 메서드)를 선호합니다.
  • 두 메서드 모두 확장된 형식을 사용하는 경우 매개 변수가 더 많은 메서드가 더 나은 방법입니다.
  • 한 메서드가 확장된 폼을 사용하고 다른 메서드가 일반 폼을 사용하는 경우 표준 폼을 사용하는 방법이 더 좋습니다.

3.7.5 향상된 변환

다음과 같이 표시된 아래 텍스트는 Windows PowerShell과 관련이 있습니다.

변환은 다음과 같은 방식으로 가장 낮은 값에서 가장 높은 값으로 순위가 매겨집니다.

  • T~1~[]에서 T~2~[]로, T~1~T~2~ 사이에 할당 가능한 변환이 없는 경우
  • T를 문자열로 변환하는데, 여기서 T는 모든 유형이 될 수 있습니다.
  • T~1~에서 T~2~로, 여기서 T~1~ 또는 T~2~이(가) 구현 정의 방식으로 사용자 지정 변환을 정의합니다.
  • T~1~가 IConvertible을 구현하는 경우, T~2~에서 T~1~으로
  • T~1~ 또는 T~2~T~1~ 메서드를 구현하면 T~2~에서 T~2~ op_Implicit(T1)까지
  • T~1~ 또는 T~2~T~1~ 메서드를 구현하면 T~2~에서 T~2~ op_Explicit(T1)까지
  • T~1~에서 T~2~로, 여기서 T~2~T~1~ 형식의 단일 인수를 받는 생성자를 구현합니다.
  • 다음 변환 중 하나:
    • TT이 정적 메서드 T Parse(string) 또는 T Parse(string, IFormatProvider)을 구현하는 문자열입니다
    • T~1~에서 T~2~으로, 여기서 T~2~는 임의의 열거형이며 T~1~는 문자열 또는 문자열로 변환할 수 있는 객체 컬렉션입니다.
  • T 모든 형식인 PSObject에 T
  • 다음 변환 중 하나를 사용할 수 있습니다: Language
    • T이 숫자 타입일 때 T를 bool로 변환
    • TT, regex, wmisearcher, wmi, wmiclass, adsi또는 adsisearcher인 경우 type에 문자열을 사용하여
    • T bool
    • T~1~에서 Nullable[T~2~]으로, T~1~에서 T~2~로의 변환이 있는 경우
    • T를 void로 변환
    • T~1~[]에서 T~2~[]로, T~1~T~2~ 간에 할당 가능한 변환이 있는 경우
    • T~1~가 컬렉션인 T~2~[]에서 T~1~으로
    • IDictionary Hashtable
    • T ref
    • T xml
    • scriptblock delegate
    • T~1~에서 T~2~까지, 여기서 T~1~는 정수형이고 T~2~는 열거형입니다.
  • $null에서 T로, T는 모든 값 유형입니다.
  • $null에서 T까지, T가 참조 형식인 경우
  • 다음 변환 중 어느 것이든지:
    • T에 있는 T을(를) SByte 바이트로 전환

    • UInt16T, T, 또는 SByte일 때 byte에서 Int16까지.

    • Int16에서 T까지, 여기서 TSByte 또는 byte입니다.

    • UInt32에서 T까지의 경우 TSByte, byte, Int16, UInt16중 하나이거나 int일 때.

    • int에서 T까지, 단 TSByte, byte, Int16또는 UInt16입니다.

    • UInt64에서 T까지, TSByte, byte, Int16, UInt16, int, UInt32또는 long일 때.

    • long에서 T까지의 범위는 TSByte, byte, Int16, UInt16, int또는 UInt32일 때입니다.

    • float에서 T까지, 여기서 T는 정수형이거나 decimal입니다.

    • double에서 T까지, 여기서 T는 정수형이거나 decimal입니다.

    • decimal에서 T까지, 여기서 T는 정수 형식입니다.

  • 다음 변환 중 어느 것이든지:
    • SByte에서 T까지, 단 Tbyte, uint6, UInt32또는 UInt64입니다.
    • Int16T, T, 또는 UInt16일 때 UInt32에서 UInt64까지.
    • int에서 T까지, 여기서 TUInt32 또는 UInt64입니다.
    • long UInt64
    • decimal에서 T까지, 여기서 Tfloat 또는 double입니다.
  • 다음 변환 중 어느 것이든지:
    • T에서 string까지, 여기서 T는 숫자 형식입니다.
    • T에서 char까지, 여기서 T는 숫자 형식입니다.
    • string에서 T까지, 여기서 T는 숫자 형식입니다.
  • 다음 변환 중에서 이러한 변환은 할당 가능한 변환으로 간주됩니다.
    • byte에서 T까지 TInt16, UInt16, int, UInt32, long, UInt64, single, double또는 decimal인 경우
    • SByte에서 T까지 TInt16, UInt16, int, UInt32, long, UInt64, single, double또는 decimal인 경우
    • UInt16에서 T까지, 여기서 Tint, UInt32, long, 또는 UInt64, single, double, 또는 decimal입니다.
    • Int16에서 T까지, 여기서 Tint, UInt32, long, 또는 UInt64, single, double, 또는 decimal입니다.
    • UInt32 T위치 또는 T, long, UInt64또는 singledoubledecimal.
    • int에서 T까지의 경우 Tlong, UInt64, single, double중 하나이거나 decimal일 때.
    • single double
  • T~1~에서 T~2~로, 여기서 T~2~T~1~의 기본 클래스 또는 인터페이스입니다. 이 변환은 할당 가능한 변환으로 간주됩니다.
  • string char[]
  • T에서 T로 이 변환은 할당 가능한 변환으로 간주됩니다.

T~1~가 배열이 아니고 다른 변환이 적용되지 않는 T~2~[]에서 T~1~로의 각 변환에 대해서, T~1~에서 T~2~로의 변환이 있는 경우, 변환의 순위는 T~1~에서 T~2~로의 변환보다는 더 나쁘지만 T~1~에서 T~2~로의 변환보다 더 나은 순위를 갖습니다.

3.8 이름 조회

이름이 같은 여러 종류의 명령이 모두 있을 수 있습니다. 이러한 경우 이름 조회가 수행되는 순서는 별칭, 함수, cmdlet 및 외부 명령입니다.

3.9 형식 이름 조회

§7.1.10 문에는 "형식 리터럴는 구현에서 일부 지정되지 않은 기본 형식으로 나타낸다."는 내용이 포함되어 있습니다. 결과적으로 형식 이름은 기본 형식의 동의어입니다." 형식의 예로는 int, double, long[]Hashtable있습니다.

형식 이름은 다음과 같이 일치합니다. 지정된 형식 이름을 int, long, double 등의 기본 제공 형식 가속기목록과 비교합니다. 일치하는 항목이 발견되면 그것이 유형입니다. 그렇지 않으면 형식 이름이 정규화되어 있다고 가정하고 호스트 시스템에 이러한 형식이 있는지 확인합니다. 일치하는 항목이 발견되면 그것이 유형입니다. 그렇지 않으면 네임스페이스 접두사 System.를 추가하십시오. 일치하는 항목이 발견되면 그것이 유형입니다. 그렇지 않으면 자료형 이름이 잘못되었습니다. 이 알고리즘은 제네릭 형식의 각 형식 인수에 적용됩니다. 그러나 함수나 연산자가 사용하는 인수 또는 피연산자의 수(항수)를 지정할 필요가 없습니다.

3.10 자동 메모리 관리

다양한 연산자와 cmdlet은 문자열 및 배열과 같은 참조 형식 개체에 대한 메모리를 할당합니다. 이 메모리의 할당 및 해제는 PowerShell 런타임 시스템에서 관리됩니다. 즉, PowerShell은 자동 가비지 수집제공합니다.

3.11 실행 순서

부작용 명령 실행 환경의 상태 변경입니다. 변수 값 변경(할당 연산자 또는 전/후 증가 및 감소 연산자를 통해)은 파일 내용 변경과 마찬가지로 부작용입니다.

달리 지정하지 않는 한 문은 어휘 순서로 실행됩니다.

일부 연산자의 경우를 제외하고, 식의 항목 평가 순서와 부작용이 발생하는 순서는 모두 지정되지 않습니다.

명령을 호출하는 식에는 명령을 지정하는 식과 해당 명령에 값을 전달할 인수를 지정하는 0개 이상의 식이 포함됩니다. 이러한 식이 서로 상대적으로 계산되는 순서는 지정되지 않습니다.

3.12 오류 처리

명령이 실패하면 오류간주되며 해당 오류에 대한 정보는 형식이 지정되지 않은 오류 레코드기록됩니다(§4.5.15); 그러나 이 형식은 첨자를 지원합니다.

오류는 두 범주 중 하나에 해당합니다. 작업을 종료하거나(종료 오류), 또는 종료하지 않거나(종료되지 않는 오류) 합니다. 종료 오류가 발생하면 오류가 기록되고 작업이 중지됩니다. 종료되지 않는 오류가 발생하면 오류가 기록되고 작업이 계속됩니다.

종료되지 않는 오류는 오류 스트림에 기록됩니다. 해당 정보를 파일로 리디렉션할 수 있지만 오류 개체는 먼저 문자열로 변환되며 이러한 개체의 중요한 정보는 캡처되지 않으므로 불가능하지 않은 경우 진단을 어렵게 만듭니다. 대신 오류 텍스트(§7.12)를 리디렉션하고 오류 개체를 $Error1 = command 2>&1같이 변수에 저장할 수 있습니다.

자동 변수 $Error는 최근 오류를 나타내는 오류 기록 모음을 포함하고 있으며, 가장 최근의 오류는 $Error[0]에 있습니다. 이 컬렉션은 새 레코드가 추가될 때 이전 레코드가 삭제되도록 버퍼에서 유지 관리됩니다. 자동 변수 $MaximumErrorCount 저장할 수 있는 레코드 수를 제어합니다.

$Error 하나의 컬렉션에 함께 혼합된 모든 명령의 모든 오류를 포함합니다. 특정 명령에서 오류를 수집하려면, 사용자 정의 변수를 통해 컬렉션을 보관할 수 있는 공통 매개 변수 ErrorVariable을 사용하십시오.

3.13 파이프라인

파이프라인은 파이프 연산자 |(U+007C)로 구분된 일련의 하나 이상의 명령입니다. 각 명령은 선행 작업으로부터 입력을 받고 출력을 후속 파일에 씁니다. 파이프라인 끝에 있는 출력이 삭제되거나 파일로 리디렉션되지 않는 한, 호스트 환경으로 전송되며, 이를 표준 출력에 쓰도록 선택할 수 있습니다. 파이프라인의 명령은 인수에서 입력을 받을 수도 있습니다. 예를 들어 지정된 파일 시스템 디렉터리에 파일 이름 목록을 만들고, 텍스트 레코드 집합을 정렬하고, 텍스트 레코드에 대해 각각 일부 처리를 수행하는 Get-ChildItem, Sort-ObjectProcess-File다음과 같은 명령을 사용하는 것이 좋습니다.

Get-ChildItem
Get-ChildItem E:*.txt | Sort-Object -CaseSensitive | Process-File >results.txt

첫 번째 경우 Get-ChildItem 현재/기본 디렉터리에 파일의 이름 컬렉션을 만듭니다. 해당 컬렉션은 기본적으로 각 요소의 값을 표준 출력에 쓰는 호스트 환경으로 전송됩니다.

두 번째 경우에서 Get-ChildItem 인수 E:*.txt사용하여 지정된 디렉터리에 파일의 이름 컬렉션을 만듭니다. 이 컬렉션은 명령 Sort-Object으로 기록되며, 기본적으로 대소문자를 구분하는 CaseSensitive 인수에 의해 오름차순으로 정렬됩니다. 그 결과 컬렉션은 명령어 Process-File에 기록된 후, 일부(알 수 없음) 처리가 수행됩니다. 그런 다음 해당 명령의 출력이 results.txt파일로 리디렉션됩니다.

명령이 단일 개체를 작성하는 경우 후속 명령은 해당 개체를 수신한 다음 후속 개체에 자체 개체를 쓴 후 종료됩니다. 그러나 명령이 여러 개체를 쓰는 경우 한 번에 하나씩 후속 명령에 전달되며, 이 명령은 개체당 한 번씩 실행됩니다. 이 동작은 스트리밍으로 불립니다. 스트림 처리에서 개체는 전체 컬렉션이 생성될 때가 아니라, 사용 가능한 즉시 파이프라인을 따라 기록됩니다.

컬렉션을 처리할 때 초기 요소 앞과 마지막 요소 뒤의 특수 처리를 수행할 수 있도록 명령을 작성할 수 있습니다.

3.14 모듈

모듈 PowerShell 코드를 분할, 구성 및 추상화할 수 있는 자체 포함 재사용 가능한 단위입니다. 모듈에는 명령(예: cmdlet 및 함수) 및 단일 단위로 사용할 수 있는 항목(예: 변수 및 별칭)이 포함될 수 있습니다.

모듈을 만든 후에는 세션으로 가져와야 해당 내의 명령과 항목을 사용할 수 있습니다. 가져온 명령과 항목은 로컬로 정의된 것처럼 동작합니다. 모듈은 Import-Module 명령을 사용하여 명시적으로 가져옵니다. 구현에서 정의된 방식으로 결정된 대로 모듈을 자동으로 가져올 수도 있습니다.

모듈을 나타내는 개체의 형식은 §4.5.12설명되어 있습니다.

모듈은 §11에 자세히 설명되어 있습니다.

3.15 와일드카드 식

와일드카드 식에는 다음 요소 중 0개 이상이 포함될 수 있습니다.

요소 묘사
*, ?또는 [ 이외의 문자 해당 한 문자와 일치
* 0개 이상의 문자와 일치합니다. * 문자와 일치하려면 [*]를 사용합니다.
? 하나의 문자와 일치합니다. ??을 일치하려면 문자에는 [?]를 사용하십시오.
[설정]

집합에서 어떤 한 문자와 일치하며, 이 집합은 비어 있을 수 없습니다.

집합 ]로 시작하는 경우 오른쪽 대괄호는 집합 일부로 간주되고 다음 오른쪽 대괄호는 집합을 종료합니다. 그렇지 않으면 첫 번째 오른쪽 대괄호가 집합을 종료합니다.

집합 -로 시작하거나 끝나는 경우 해당 하이픈-빼기는 집합일부로 간주됩니다. 그렇지 않으면 하이픈-빼기의 양쪽 문자가 포괄 범위 구분 기호인 연속 유니코드 코드 포인트의 범위를 나타냅니다. 예를 들어 A-Z는 26개의 대문자 영어 문자를 나타내고 0-9는 10진수를 나타냅니다.

메모

자세한 내용은 "The Open Group Base Specifications: Pattern Matching", IEEE Std 1003.1, 2004 Edition에서 찾을 수 있습니다.. PowerShell에서 이스케이프 문자로 사용되는 것은 백슬래시가 아닌 백틱입니다.

3.16 정규식

정규식은 다음 요소 중 0개 이상을 포함할 수 있습니다.

요소 묘사
., [, ^, *, $또는 \ 이외의 문자 해당 한 문자와 일치
. 하나의 문자와 일치합니다. 일치시키려면 . 문자, \.를 사용합니다.
[설정]
[^설정]

[집합] 패턴은 집합의 어떤 한 문자와도 일치합니다. [^집합] 문자열은 집합문자와 일치하지 않습니다. 세트은 비워 둘 수 없습니다.

집합 ] 또는 ^]로 시작하는 경우 오른쪽 대괄호는 집합 일부로 간주되고 다음 오른쪽 대괄호는 집합을 종료합니다. 그렇지 않으면 첫 번째 오른쪽 대괄호가 집합을 종료합니다.

집합이 - 또는 ^-로 시작하거나 -로 끝나는 경우, 그 하이픈 마이너스는 집합의 일부로 간주됩니다. 그렇지 않으면 그 하이픈 마이너스 양쪽의 문자가 범위에 포함되는 연속적인 유니코드 코드 포인트의 범위를 나타냅니다. 예를 들어 A-Z는 26개의 대문자 영어 문자를 나타내고 0-9는 10진수를 나타냅니다.

* 이전 요소의 0회 이상 발생과 일치합니다.
+ 이전 요소의 더 많은 항목 중 하나와 일치합니다.
? 이전 요소의 한 번의 발생 0과 일치합니다.
^ 문자열 시작에서 일치합니다. ^ 문자와 일치시키려면 \^를 사용하십시오.
$ 문자열의 끝에 일치합니다. $ 문자를 매칭하려면 $를 사용합니다.
\ c 문자 는 이스케이프되어 정규식 요소로 인식되지 않습니다.

Windows PowerShell: Microsoft .NET Framework 정규식에서 사용할 수 있는 문자 클래스는 다음과 같이 지원됩니다.

요소 묘사
\p{name} 지정된 이름의 문자 클래스를 사용하여 모든 문자를 일치시킵니다. 지원되는 이름은 유니코드 그룹 및 블록 범위(예: Ll, Nd, Z, IsGreek 및 IsBoxDrawing)입니다.
\P{name} 그룹 및 이름으로 지정된 블록 범위에 포함되지 않은 텍스트와 일치합니다.
\w 단어 문자를 일치시킵니다. [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]유니코드 문자 범주에 해당합니다. ECMAScript 옵션에서 ECMAScript 준수를 지정한 경우 \w는 [a-zA-Z_0-9]과 동등합니다.
\W 단어가 아닌 문자를 찾습니다. [\^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]유니코드 범주에 해당합니다.
\s 공백 문자를 일치시킵니다. [\f\n\r\t\v\x85\p{Z}]유니코드 문자 범주에 해당합니다.
\S 공백이 아닌 어떤 문자든지 일치시킵니다. [\^\f\n\r\t\v\x85\p{Z}]유니코드 문자 범주에 해당합니다.
\d 십진수 숫자와 일치합니다. 유니코드 동작에 대해 \p{Nd}과 같으며, 비유니코드 동작에 대해 [0-9]과 같습니다.
\D 숫자가 아닌 모든 문자를 일치시킵니다. 유니코드 동작에 대해 \P{Nd}과 같으며, 비유니코드 동작에 대해 [\^0-9]과 같습니다.

Microsoft .NET Framework 정규식에서 사용할 수 있는 수량자는 다음과 같이 지원됩니다.

요소 묘사
* 0개 이상의 일치를 지정합니다. 예를 들어, \w* 이나 (abc)*.{0,}와 동일합니다.
+ 앞에 있는 문자들의 반복된 패턴과 일치합니다.
? 0개 또는 1개의 일치 항목을 지정합니다. 예를 들어 \w? 또는 (abc)?. {0,1}와 동등합니다.
{n} 정확히 n개의 일치 항목을 지정합니다. 예를 들어 (pizza){2}.
{n,} n개 이상의 일치 항목을 지정합니다. 예를 들어 (abc){2,}.
{n,m} 최소n개 이상, 최대m개까지의 일치하는 조건을 지정합니다.