Freigeben über


about_Case-Sensitivity

Kurzbeschreibung

PowerShell wird bei Beibehaltung der Groß-/Kleinschreibung so groß wie möglich unterschieden.

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 rein ein PowerShell-Konzept und behandelt die Groß-/Kleinschreibung nicht. Es gibt jedoch eine starke Zuordnung zu einem Ordnernamen, bei dem die Groß-/Kleinschreibung im zugrunde liegenden Betriebssystem beachtet werden 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 Sitzungszustand gespeichert, wobei der Fall verwendet wird, nach dem 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 der Fall des importierten Namens des Moduls nicht übereinstimmt, Update-Help können die Hilfedateien nicht gefunden und ein Fehler gemeldet werden.

  • 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