citlivost about_Case

Krátký popis

PowerShell je co nejvíce nerozlišující velká a malá písmena, přičemž zachovává jejich původní podobu.

Dlouhý popis

Obecně platí, že PowerShell nerozlišuje velká a malá písmena bez ohledu na to, kde je to možné, a nerozlišuje základní operační systém.

U většiny operací nerozlišují velká a malá písmena systémů Windows. U většiny operací se ale rozlišují malá a velká písmena, zejména pro přístup k systému souborů a proměnným prostředí.

U všech systémů je zaručeno, že PowerShell nerozlišuje velká a malá písmena pro následující oblasti:

  • Názvy proměnných
  • Názvy operátorů
  • Přístup bez slovníku
  • Zjišťování příkazů a aliasů PowerShellu Tím se vyloučí příkazy ExternalScript a Application.
  • Názvy a aliasy parametrů
  • Klíčová slova jazyka PowerShellu
  • příkazy using namespace
  • Psaní literálů
  • příkazy #Requires
  • Klíčová slova nápovědy založené na komentářích
  • Názvy PSProvider
  • Názvy PSDrivu
  • Modifikátory oboru

Zvláštní případy

  • Názvy modulů nerozlišují malá a velká písmena (s výjimkami).

    Název modulu je čistě koncept PowerShellu a nerozlišuje velká a malá písmena. Existuje však silné přiřazení k názvu adresáře, který může být v základním operačním systému závislý na velikosti písmen. Importování dvou modulů se stejným názvem bez rozlišování velkých a malých písmen má stejné chování jako import dvou modulů se stejným názvem z různých cest.

    Název modulu je uložen ve stavu relace pomocí případu, podle kterého byl importován. Název uložený ve stavu relace se používá Update-Help při hledání nových souborů nápovědy. Webová služba, která obsluhuje soubory nápovědy pro Microsoft, používá systém souborů s rozlišováním velkých a malých písmen. Pokud se případ importovaného názvu modulu neshoduje, Update-Help nemůže najít soubory nápovědy a hlásí chybu.

  • Poskytovatelé PS:

    Environment U FileSystem jiných systémů než Windows rozlišují velká a malá písmena. Obecně platí, že operace zahrnující cesty nebo proměnné prostředí v takových systémech rozlišují malá a velká písmena.

    Porovnávání zástupných znaků podle rutin zprostředkovatele ale nerozlišuje malá a velká písmena bez ohledu na systém.

    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
    
  • V názvech sad parametrů se rozlišují malá a velká písmena.

    Případ DefaultParameterSetName musí být shodný s ParameterSetName.

  • Metody .NET ve výchozím nastavení často vykazují chování citlivé na malá a velká písmena.

    Mezi příklady patří:

    • Ekvivalentní metody .NET (bez výslovného souhlasu) pro běžné operátory PowerShellu, jako jsou:
      • Array.Contains(), String.Contains(), String.Replace(), , Regex.Match()Regex.Replace()
    • Odraz; názvy členů musí používat správné písmeno.
    • Neslovná instance slovníku. Například:
      • [hashtable]::new() obsahuje klíče citlivé na malá a velká písmena, zatímco literál @{} hashovací tabulky obsahuje klíče nerozlišující malá a velká písmena.
      • [ordered]::new() obsahuje klíče citlivé na malá a velká písmena, zatímco [ordered] @{} klíče nerozlišují malá a velká písmena. Akcelerátor[ordered] typů není dostupný v PowerShellu verze 5.1 a starším.
    • Explicitní volání Enum.Parse() ve výchozím nastavení rozlišují malá a velká písmena, zatímco PowerShell obvykle zpracovává výčty nerozlišují malá a velká písmena.
  • -Unique Rutin:

  • Compare-Object ve výchozím nastavení nerozlišuje malá a velká písmena, ale má -CaseSensitive přepínač. [char] Porovnání typů ve výchozím nastavení rozlišují malá a velká písmena. Porovnání řetězců ve výchozím nastavení nerozlišuje malá a velká písmena.

    # 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 byla přidána v PS v6. V PS v7.3 došlo ke změně, která při zadání tohoto parametru považuje klíče JSON za citlivé na malá a velká písmena.
      • U parametru se vygeneruje objekt typu Management.Automation.OrderedHashtable , který obsahuje klíče citlivé na malá a velká písmena.
      • Bez parametru se klíče JSON považují za nerozlišující malá a velká písmena. Výstup je vlastní objekt; poslední klíč nerozlišující velká a malá písmena vyhrává.
    • https://github.com/PowerShell/PowerShell/issues/19928
  • Group-Object:

    • Ve výchozím nastavení nerozlišují malá a velká písmena, ale má -CaseSensitive přepínač.

    • Ve Windows PowerShellu v5.1 -CaseSensitive a -AsHashtable vytvoří hodnotu hashtable s rozlišováním malých a velkých písmen. Duplicitní klíče způsobí chybu.

      [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
      
    • V PowerShellu v7 a vyšších -CaseSensitive verzích vytvoří -AsHashtable hashovatelnou tabulku s rozlišováním velkých a malých písmen. U duplicitních klíčů nedojde k žádné chybě.

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

    • Ve výchozím nastavení nerozlišují malá a velká písmena, ale má -CaseSensitive přepínač.
  • Get-Command a zjišťování/vyvolání příkazů:

    • U systémů souborů s rozlišováním velkých a malých písmen se rozlišují zjišťování a vyvolání ExternalScript příkazů Application a rozlišují se malá a velká písmena.
    • Get-Command Při porovnávání zástupných znaků s těmito typy se rozlišují velká a malá písmena.
    • Všechny ostatní nerozlišují malá a velká CommandTypes písmena.
  • Relační operátory:

    • Ve výchozím nastavení nerozlišují operátory malá a velká písmena.

    • -c* operátory rozlišují malá a velká písmena.

    • -i* operátory nerozlišují malá a velká písmena.

    • -replace / -ireplace ve výchozím nastavení nerozlišuje malá a velká písmena, s výjimkoupojmenovaných skupin zachycení, u kterých se rozlišují malá a velká písmena.

      'Bar' -replace '(?<a>a)', '${a}${a}'
      # Baar
      
      'Bar' -replace '(?<a>a)', '${A}${A}'
      # B${A}${A}r
      
  • -split operátor:

    • -split nerozlišují -isplit malá a velká písmena.

    • -csplit rozlišují se malá a velká písmena, pokud není zadána IgnoreCase možnost.

      'Bar' -csplit 'A', 0
      # Bar
      
      'Bar' -csplit 'A', 0, 'IgnoreCase'
      # B
      # r
      
  • Dokončování tabulátoru:

    • V systémech souborů s rozlišováním velkých a malých písmen jsou dokončování tabulátoru i globbing nerozlišující malá a velká písmena. Například TabExpansion2 -inputScript ./foo se dokončí v Linuxu ./Foo.txt .
  • using Prohlášení:

    • V systémech using module souborů s rozlišováním malých a velkých písmen a using assembly při zadání cesty se rozlišují malá a velká písmena.
    • using module pouze název modulu nerozlišuje velká a malá písmena.
    • using namespace nerozlišuje malá a velká písmena.
  • Speciální znaky:

    • U řídicích sekvencí se rozlišují malá a velká písmena `n .

Viz také