Freigeben über


about_Case-Sensitivity

Kurzbeschreibung

PowerShell unterscheidet so wenig wie möglich zwischen Groß- und Kleinschreibung und behält die Großschreibung bei.

Lange Beschreibung

Im Allgemeinen wird bei PowerShell die Groß-/Kleinschreibung unabhängig von der Groß-/Kleinschreibung beibehalten und das zugrunde liegende Betriebssystem nicht abgebrochen.

Windows-basierte Systeme berücksichtigen bei den meisten Vorgängen die Groß-/Kleinschreibung nicht. Nicht-Windows-Systeme beachten jedoch die Groß-/Kleinschreibung für die meisten Vorgänge, insbesondere für den Zugriff auf Dateisystem- und Umgebungsvariablen.

PowerShell wird bei allen Systemen für die folgenden Bereiche garantiert die Groß-/Kleinschreibung nicht beachtet:

  • Variablennamen
  • Operatornamen
  • Nichtwörterbuchmitgliedszugriff
  • Befehlsermittlung von PowerShell-Befehlen und Aliasen. Dies schließt ExternalScript- und Application-Befehle aus.
  • Parameternamen und Aliase
  • PowerShell-Sprachstichwörter
  • using namespace-Anweisungen
  • Typliterale
  • #Requires-Anweisungen
  • Schlüsselwörter der kommentarbasierten Hilfe
  • PSProvider-Namen
  • PSDrive-Namen
  • Bereichsmodifizierer

Spezialfälle

  • Bei Modulnamen wird die Groß-/Kleinschreibung nicht beachtet (mit Ausnahmen)

    Der Name des Moduls ist ein reines PowerShell-Konzept und wird unabhängig von der Groß- und Kleinschreibung behandelt. Es gibt jedoch eine eindeutige Zuordnung zu einem Ordnernamen, der im zugrunde liegenden Betriebssystem die Groß- und Kleinschreibung berücksichtigen kann. Das Importieren von zwei Modulen mit demselben Namen mit der Groß-/Kleinschreibung hat das gleiche Verhalten wie das Importieren von zwei Modulen mit demselben Namen aus unterschiedlichen Pfaden.

    Der Name eines Moduls wird im Status der Sitzung unter Verwendung der Groß- und Kleinschreibung gespeichert, mit der es importiert wurde. Der Name, wie im Sitzungszustand gespeichert, wird verwendet Update-Help , wenn Sie nach neuen Hilfedateien suchen. Der Webdienst, der die Hilfedateien für Microsoft bereitstellt, verwendet ein Dateisystem mit Groß-/Kleinschreibung. Wenn die Groß-/Kleinschreibung des importierten Namens des Moduls nicht übereinstimmt, kann Update-Help die Hilfedateien nicht finden und liefert einen Fehler.

  • PS-Anbieter:

    Bei FileSystem Nicht-Windows-Systemen wird zwischen Groß- und Environment Kleinschreibung unterschieden. Im Allgemeinen werden Vorgänge mit Pfaden oder Umgebungsvariablen bei solchen Systemen groß-/kleinschreibung beachtet.

    Bei der Zuordnung von Wildcards nach Anbieter-Cmdlets wird jedoch unabhängig vom System die Groß-/Kleinschreibung nicht beachtet.

    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
    
  • Bei Parametersatznamen wird die Groß-/Kleinschreibung beachtet.

    Der DefaultParameterSetName Fall muss identisch mit ParameterSetName.

  • .NET-Methoden weisen standardmäßig ein Verhalten mit Groß-/Kleinschreibung auf.

    Beispiele sind:

    • Entsprechende .NET-Methoden (ohne explizite Anmeldung) für allgemeine PowerShell-Operatoren wie:
      • Array.Contains(), , String.Contains()String.Replace(), , Regex.Match()Regex.Replace()
    • Reflexion; Membernamen müssen die richtige Groß-/Kleinschreibung verwenden.
    • Nicht literale Wörterbuchinstanziierung. Beispiel:
      • [hashtable]::new() weist Bei Schlüsseln mit Groß-/Kleinschreibung auf, während bei einem Hashtable-Literal @{} die Groß-/Kleinschreibung nicht beachtet wird.
      • [ordered]::new() Bei Schlüsseln mit Groß-/Kleinschreibung wird die Groß-/Kleinschreibung beachtet, während bei schlüsseln [ordered] @{} die Groß-/Kleinschreibung nicht beachtet wird. Die [ordered]Typbeschleuniger ist in PowerShell v5.1 und früheren Versionen nicht verfügbar.
    • Bei expliziten Aufrufen Enum.Parse() wird standardmäßig die Groß-/Kleinschreibung beachtet, während PowerShell in der Regel Enumerationen ohne Groß-/Kleinschreibung behandelt.
  • -Unique Cmdlets:

  • Compare-Object die Groß-/Kleinschreibung wird standardmäßig nicht beachtet, verfügt jedoch über einen -CaseSensitive Schalter. Bei einem Vergleich von [char] Typen wird standardmäßig die Groß-/Kleinschreibung beachtet. Der Zeichenfolgenvergleich wird standardmäßig nicht beachtet.

    # 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 wurde in PS v6 hinzugefügt. In PS v7.3 wurde eine Änderung vorgenommen, um JSON-Schlüssel beim Angeben dieses Parameters als Groß-/Kleinschreibung zu behandeln.
      • Bei dem Parameter wird ein Objekt vom Typ Management.Automation.OrderedHashtable ausgegeben, bei dem die Groß-/Kleinschreibung beachtet wird.
      • Ohne den Parameter werden JSON-Schlüssel als Groß-/Kleinschreibung behandelt. Ausgabe ist ein benutzerdefiniertes Objekt; Bei der letzten Groß-/Kleinschreibung wird die Groß-/Kleinschreibung nicht beachtet.
    • https://github.com/PowerShell/PowerShell/issues/19928
  • Group-Object:

    • Die Groß-/Kleinschreibung wird standardmäßig nicht beachtet, verfügt jedoch über einen -CaseSensitive Schalter.

    • In Windows PowerShell v5.1 -CaseSensitive wird -AsHashtable eine Hashtabelle ohne Groß-/Kleinschreibung erzeugt. Doppelte Schlüssel führen zu einem Fehler.

      [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
      
    • In PowerShell v7 und höher -CaseSensitive wird eine Hashtabelle mit Groß-/ -AsHashtable Kleinschreibung erzeugt. Bei doppelten Schlüsseln tritt kein Fehler auf.

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

    • Die Groß-/Kleinschreibung wird standardmäßig nicht beachtet, verfügt jedoch über einen -CaseSensitive Schalter.
  • Get-Command und Befehlsermittlung/Aufruf:

    • Bei Dateisystemen bei Groß- und Kleinschreibung wird zwischen Groß- und ExternalScriptApplication Kleinschreibung unterschieden.
    • Get-Command Bei einem Wildcardabgleich mit diesen Typen wird auch die Groß-/Kleinschreibung beachtet.
    • Bei allen anderen CommandTypes wird die Groß-/Kleinschreibung nicht beachtet.
  • Vergleichsoperatoren:

    • Standardmäßig wird die Groß-/Kleinschreibung von Operatoren nicht beachtet.

    • -c* Bei Operatoren wird die Groß-/Kleinschreibung beachtet.

    • -i* Bei Operatoren wird die Groß-/Kleinschreibung nicht beachtet.

    • -replace / -ireplace die Groß-/Kleinschreibung wird standardmäßig nicht beachtet, mit Ausnahmevon benannten Erfassungsgruppen, bei denen die Groß-/Kleinschreibung beachtet wird.

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

    • -split und die Groß-/ -isplit Kleinschreibung wird nicht beachtet.

    • -csplit die Groß-/Kleinschreibung wird beachtet, es sei denn , die IgnoreCase Option wird angegeben.

      'Bar' -csplit 'A', 0
      # Bar
      
      'Bar' -csplit 'A', 0, 'IgnoreCase'
      # B
      # r
      
  • Registerkartenabschluss:

    • Bei Dateisystemen mit Groß-/Kleinschreibung wird bei Tabstoppabschluss und Globbing die Groß-/Kleinschreibung nicht beachtet. Beispielsweise TabExpansion2 -inputScript ./foo wird die Ausführung auf Linux abgeschlossen ./Foo.txt .
  • using Anweisung:

    • Bei Dateisystemen using module bei Groß-/Kleinschreibung und bei Angabe eines Pfads wird die Groß-/ using assembly Kleinschreibung beachtet.
    • using module bei nur einem Modulnamen wird die Groß-/Kleinschreibung nicht beachtet.
    • using namespace die Groß-/Kleinschreibung wird immer nicht beachtet.
  • Sonderzeichen:

    • Escapesequenzen wie `n Groß-/Kleinschreibung werden beachtet.

Siehe auch