다음을 통해 공유


about_Case 민감도

간단한 설명

PowerShell은 대/소문자를 가능한 한 구분하지 않으면서도 대/소문자를 유지합니다.

긴 설명

일반적으로 PowerShell은 대/소문자를 유지하면서 기본 OS를 중단하지 않으면서 가능한 경우 대/소문자를 구분하지 않습니다.

Windows 기반 시스템은 대부분의 작업에 대/소문자를 구분하지 않습니다. 그러나 Windows가 아닌 시스템은 대부분의 작업, 특히 파일 시스템 및 환경 변수 액세스의 경우 대/소문자를 구분합니다.

PowerShell은 다음 영역에 대한 모든 시스템에서 대/소문자를 구분하지 않습니다.

  • 변수 이름
  • 연산자 이름
  • 사전이 아닌 멤버 액세스
  • PowerShell 명령 및 별칭의 명령 검색 ExternalScript 및 애플리케이션 명령은 제외됩니다.
  • 매개 변수 이름 및 별칭
  • PowerShell 언어 키워드
  • using namespace 문장
  • 형식 리터럴
  • #Requires 문장
  • 주석 기반 도움말 키워드
  • PSProvider 이름
  • PSDrive 이름
  • 범위 한정자

특수 사례

  • 모듈 이름은 대/소문자를 구분하지 않습니다(예외 제외).

    모듈의 이름은 순전히 PowerShell 개념이며 대소문자를 구별하지 않습니다. 그러나 기본 운영 체제에서 대/소문자를 구분할 수 있는 폴더 이름에 대한 강력한 매핑이 있습니다. 대/소문자를 구분하지 않는 이름이 같은 두 모듈을 가져오는 것은 서로 다른 경로에서 이름이 같은 두 모듈을 가져오는 것과 동일한 동작을 줍니다.

    모듈의 이름은 가져온 경우를 사용하여 세션 상태에 저장됩니다. 세션 상태에 저장된 이름은 새 도움말 파일을 검색할 때 사용됩니다 Update-Help . Microsoft용 도움말 파일을 제공하는 웹 서비스는 대/소문자를 구분하는 파일 시스템을 사용합니다. 가져온 모듈 이름의 대소문자가 일치하지 않으면 Update-Help이 도움말 파일을 찾을 수 없으며 오류를 보고합니다.

  • PS 공급자:

    Environment 공급자는 FileSystem 비 Windows 시스템에서 대/소문자를 구분합니다. 일반적으로 경로 또는 환경 변수와 관련된 작업은 이러한 시스템에서 대/소문자를 구분합니다.

    그러나 공급자 cmdlet에 의한 와일드카드 일치는 시스템에 관계없이 대/소문자를 구분하지 않습니다.

    PS /home/user01> New-Item -Path Temp:foo.txt -Force
    
        Directory: /tmp
    
    UnixMode      User Group      LastWriteTime         Size Name
    --------      ---- -----      -------------         ---- ----
    -rw-r--r--  user01 user01    1/6/2026 10:53            0 foo.txt
    
    PS /home/user01> (Get-Item -Path Temp:FOO.txt).Name
    Get-Item: Cannot find path 'Temp:/FOO.txt' because it does not exist.
    
    PS /home/user01> (Get-Item -Path Temp:F[O]*.txt).Name
    foo.txt
    
    PS /home/user01> (Get-Item -Path Env:hOM[E]).Name
    HOME
    
  • 매개 변수 집합 이름은 대/소문자를 구분합니다.

    대/소문자는 DefaultParameterSetName 같아야 ParameterSetName합니다.

  • .NET 메서드는 대/소문자를 구분하는 동작을 기본적으로 보여 줍니다.

    예를 들면 다음과 같습니다.

    • 다음과 같은 일반적인 PowerShell 연산자를 위한 동등한 .NET 메서드(명시적 옵트인 제외)
      • Array.Contains(), String.Contains(), String.Replace(), Regex.Match()Regex.Replace()
    • 반사; 멤버 이름은 올바른 대/소문자를 사용해야 합니다.
    • 리터럴이 아닌 사전 인스턴스화입니다. 예를 들어:
      • [hashtable]::new() 에는 대/소문자를 구분하는 키가 있는 반면 해시 테이블 리터럴 @{} 에는 대/소문자를 구분하지 않는 키가 있습니다.
      • [ordered]::new() 에는 대/소문자를 구분하지 않는 키가 있는 반면 [ordered] @{} 에 대/소문자를 구분하지 않는 키가 있습니다. [ordered] 형식 가속기는 PowerShell v5.1 이하에서 사용할 수 없습니다.
    • 명시적으로 호출 Enum.Parse() 하는 것은 기본적으로 대/소문자를 구분하는 반면 PowerShell은 대/소문자를 구분하지 않는 방식으로 열거형을 처리합니다.
  • -Unique Cmdlet:

  • Compare-Object 는 기본적으로 대/소문자를 구분하지 않지만 스위치가 있습니다 -CaseSensitive . 형식 비교 [char] 는 기본적으로 대/소문자를 구분합니다. 문자열 비교는 기본적으로 대/소문자를 구분하지 않습니다.

    # Compare strings - Equal (no output)
    Compare-object -ReferenceObject a            -DifferenceObject A
    # Compare chars - Different (output)
    Compare-object -ReferenceObject ([char] 'a') -DifferenceObject ([char] 'A')
    
  • ConvertFrom-Json -AsHashtable:

    • -AsHashtable PS v6에 추가되었습니다. PS v7.3에서는 이 매개 변수를 지정할 때 JSON 키를 대/소문자를 구분하는 것으로 처리하도록 변경되었습니다.
      • 매개 변수를 사용하면 대/소문자를 구분하는 키가 있는 형식 Management.Automation.OrderedHashtable 의 개체가 내보내집니다.
      • 매개 변수가 없으면 JSON 키가 대/소문자를 구분하지 않는 것으로 처리됩니다. 출력은 사용자 지정 개체입니다. 마지막 대/소문자를 구분하지 않는 키가 우선합니다.
    • https://github.com/PowerShell/PowerShell/issues/19928
  • Group-Object:

    • 기본적으로 대/소문자를 구분하지 않지만 스위치가 있습니다 -CaseSensitive .

    • Windows PowerShell v5.1 -CaseSensitive-AsHashtable 에서 대/소문자를 구분하지 않는 해시 테이블을 생성합니다. 키가 중복되면 오류가 발생합니다.

      [pscustomobject] @{ Foo = 'Bar' }, [pscustomobject] @{ Foo = 'bar' } |
          Group-Object -Property Foo -CaseSensitive -AsHashtable
      
      Group-Object : The objects grouped by this property cannot be expanded
      because there is a key duplication. Provide a valid value for the
      property, and then try again.
      At line:2 char:11
      +           Group-Object -Property Foo -CaseSensitive -AsHashtable
      +           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          + CategoryInfo          : InvalidArgument: (:) [Group-Object], Exception
          + FullyQualifiedErrorId : The objects grouped by this property
      cannot be expanded because there is a key duplication. Provide a valid
      value for the property, and then try again.,Microsoft.PowerShell.Comman
      ds.GroupObjectCommand
      
    • PowerShell v7 이상 -CaseSensitive-AsHashtable 에서 대/소문자를 구분하는 해시 테이블을 생성합니다. 중복 키로 오류가 발생하지 않습니다.

      [pscustomobject] @{ Foo = 'Bar' }, [pscustomobject] @{ Foo = 'bar' } |
          Group-Object -Property Foo -CaseSensitive -AsHashtable
      
      Name                           Value
      ----                           -----
      Bar                            {@{Foo=Bar}}
      bar                            {@{Foo=bar}}
      
  • Select-String:

    • 기본적으로 대/소문자를 구분하지 않지만 스위치가 있습니다 -CaseSensitive .
  • Get-Command 및 명령 검색/호출:

    • 대/소문자를 구분하는 파일 시스템에서 검색 및 호출 ExternalScriptApplication 명령은 대/소문자를 구분합니다.
    • Get-Command 이러한 형식과 일치하는 와일드카드도 대/소문자를 구분합니다.
    • 다른 CommandTypes 모든 것은 대/소문자를 구분하지 않습니다.
  • 비교 연산자:

    • 기본적으로 연산자는 대/소문자를 구분하지 않습니다.

    • -c* 연산자는 대/소문자를 구분합니다.

    • -i* 연산자는 대/소문자를 구분하지 않습니다.

    • -replace / -ireplace는 대/소문자를 구분하는 명명된 캡처 그룹을제외하고 기본적으로 대/소문자를 구분하지 않습니다.

      'Bar' -replace '(?<a>a)', '${a}${a}'
      # Baar
      
      'Bar' -replace '(?<a>a)', '${A}${A}'
      # B${A}${A}r
      
  • -split 연산자:

    • -split-isplit /소문자를 구분하지 않습니다.

    • -csplit 는 옵션을 지정 하지 않는 한 대/소문자를 IgnoreCase 구분합니다.

      'Bar' -csplit 'A', 0
      # Bar
      
      'Bar' -csplit 'A', 0, 'IgnoreCase'
      # B
      # r
      
  • 탭 완성:

    • 대/소문자를 구분하는 파일 시스템에서 탭 완성 및 글로빙은 모두 대/소문자를 구분하지 않습니다. 예를 들어 TabExpansion2 -inputScript ./foo Linux에서 완료됩니다 ./Foo.txt .
  • using 문을:

    • 대/소문자를 구분하는 using assembly 파일 시스템에서 using module 는 경로를 지정할 때 대/소문자를 구분합니다.
    • using module 모듈 이름만 있는 경우 대/소문자를 구분하지 않습니다.
    • using namespace 는 항상 대/소문자를 구분하지 않습니다.
  • 특수 문자:

    • 이스케이프 시퀀스는 대 `n /소문자를 구분합니다.

참고하십시오