tentang_Peka Kasus

Deskripsi singkat

PowerShell tidak peka huruf besar/kecil saat mempertahankan kasus.

Deskripsi panjang

Sebagai prinsip umum, PowerShell tidak peka huruf besar/kecil sedapat mungkin sambil mempertahankan kasus dan tidak merusak OS yang mendasarinya.

Sistem berbasis Windows tidak peka huruf besar/kecil untuk sebagian besar operasi. Namun, sistem non-Windows peka huruf besar/kecil untuk sebagian besar operasi, terutama untuk sistem file dan akses variabel lingkungan.

PowerShell dijamin tidak peka huruf besar/kecil pada semua sistem untuk area berikut:

  • Nama variabel
  • Nama operator
  • Akses anggota non-kamus
  • Penemuan perintah dan alias PowerShell. Ini mengecualikan perintah ExternalScript dan Aplikasi.
  • Nama parameter dan alias
  • Kata kunci bahasa PowerShell
  • pernyataan using namespace
  • Ketik harfiah
  • pernyataan #Requires
  • Kata kunci bantuan berbasis komentar
  • Nama PSProvider
  • Nama PSDrive
  • Pengubah cakupan

Kasus khusus

  • Nama modul tidak peka huruf besar/kecil (dengan pengecualian)

    Nama modul adalah murni konsep PowerShell dan dianggap tidak sensitif terhadap huruf besar/kecil. Namun, ada pemetaan yang kuat ke nama folder, yang dapat sensitif huruf besar/kecil dalam sistem operasi yang digunakan. Mengimpor dua modul dengan nama yang tidak peka huruf besar/kecil yang sama memiliki perilaku yang sama dengan mengimpor dua modul dengan nama yang sama dari jalur yang berbeda.

    Nama modul disimpan dalam status sesi menggunakan kasus tempat modul diimpor. Nama, seperti yang disimpan dalam status sesi, digunakan oleh Update-Help saat mencari file bantuan baru. Layanan web yang melayani file bantuan untuk Microsoft menggunakan sistem file peka huruf besar/kecil. Ketika kasus nama modul yang diimpor tidak cocok, Update-Help tidak dapat menemukan file bantuan dan melaporkan kesalahan.

  • Penyedia PS:

    Penyedia FileSystem dan Environment peka huruf besar/kecil pada sistem non-Windows. Umumnya, operasi yang melibatkan jalur atau variabel lingkungan peka huruf besar/kecil pada sistem tersebut.

    Namun, pencocokan kartubebas oleh cmdlet penyedia tidak peka huruf besar/kecil, terlepas dari sistem.

    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
    
  • Nama set parameter peka huruf besar/kecil.

    Kasus DefaultParameterSetName ini harus identik dengan ParameterSetName.

  • Metode .NET sering menunjukkan perilaku peka huruf besar/kecil secara default.

    Contohnya meliputi:

    • Metode .NET yang setara (tanpa keikutsertaan eksplisit) untuk operator PowerShell umum seperti:
      • Array.Contains() String.Contains() String.Replace() Regex.Match() Regex.Replace()
    • Refleksi; nama anggota harus menggunakan huruf besar/kecil yang benar.
    • Instansiasi kamus non-harfiah. Misalnya:
      • [hashtable]::new() memiliki kunci peka huruf besar/kecil, sedangkan literal @{} yang dapat di-hash memiliki kunci yang tidak peka huruf besar/kecil.
      • [ordered]::new() memiliki kunci peka huruf besar/kecil, sedangkan memiliki kunci yang [ordered] @{} tidak peka huruf besar/kecil. Akselerator[ordered] jenis tidak tersedia di PowerShell v5.1 dan yang lebih lama.
    • Panggilan Enum.Parse() eksplisit peka huruf besar/kecil secara default, sedangkan PowerShell biasanya menangani enum dengan cara yang tidak peka huruf besar/kecil.
  • -Unique Cmdlet:

  • Compare-Object tidak peka huruf besar/kecil secara default, tetapi memiliki -CaseSensitive sakelar. Perbandingan jenis [char] peka huruf besar/kecil secara default. Perbandingan string tidak peka huruf besar/kecil secara default.

    # 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 ditambahkan di PS v6. Dalam PS v7.3, perubahan dilakukan untuk memperlakukan kunci JSON sebagai peka huruf besar/kecil ketika parameter ini ditentukan.
      • Dengan parameter , objek jenis Management.Automation.OrderedHashtable dipancarkan, yang memiliki kunci peka huruf besar/kecil.
      • Tanpa parameter , kunci JSON diperlakukan sebagai tidak peka huruf besar/kecil. Output adalah objek kustom; kunci peka huruf besar/kecil terakhir menang.
    • https://github.com/PowerShell/PowerShell/issues/19928
  • Group-Object:

    • Tidak peka huruf besar/kecil secara default, tetapi memiliki -CaseSensitive sakelar.

    • Di Windows PowerShell v5.1, -CaseSensitive dan -AsHashtable menghasilkan hashtable yang tidak peka huruf besar/kecil. Kunci duplikat mengakibatkan kesalahan.

      [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
      
    • Di PowerShell v7 dan yang lebih tinggi, -CaseSensitive dan -AsHashtable menghasilkan hashtable peka huruf besar/kecil. Tidak ada kesalahan yang terjadi dengan kunci duplikat.

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

    • Tidak peka huruf besar/kecil secara default, tetapi memiliki -CaseSensitive sakelar.
  • Get-Command dan penemuan/pemanggilan perintah:

    • Pada sistem file peka huruf besar/kecil, penemuan dan pemanggilan ExternalScript dan Application perintah peka huruf besar/kecil.
    • Get-Command pencocokan kartubebas dengan jenis ini juga peka huruf besar/kecil.
    • Semua lainnya CommandTypes tidak peka huruf besar/kecil.
  • Operator perbandingan:

    • Secara default, operator tidak peka huruf besar/kecil.

    • -c* operator peka huruf besar/kecil.

    • -i* operator tidak peka huruf besar/kecil.

    • -replace / -ireplace tidak peka huruf besar/kecil secara default, kecuali dengan grup pengambilan bernama, yang peka huruf besar/kecil.

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

    • -split dan -isplit tidak peka huruf besar/kecil.

    • -csplit peka huruf besar/kecil, kecualiIgnoreCase opsi ditentukan.

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

    • Pada sistem file peka huruf besar/kecil, penyelesaian tab dan globbing keduanya tidak peka huruf besar/kecil. Misalnya, TabExpansion2 -inputScript ./foo akan selesai ./Foo.txt di Linux.
  • using Pernyataan:

    • Pada sistem file peka huruf besar/kecil, using module dan using assembly peka huruf besar/kecil saat jalur ditentukan.
    • using module hanya dengan nama modul tidak peka huruf besar/kecil.
    • using namespace selalu tidak peka huruf besar/kecil.
  • Karakter khusus:

    • Urutan escape seperti `n peka huruf besar/kecil.

Lihat juga