簡単な説明
PowerShell は、大文字と小文字を保持しながら、可能な限り大文字と小文字を区別しません。
長い説明
一般的な原則として、PowerShell は可能な限り大文字と小文字を区別しませんが、大文字と小文字は保持され、基になる OS は中断されません。
Windows ベースのシステムでは、ほとんどの操作で大文字と小文字が区別されません。 ただし、Windows 以外のシステムでは、ほとんどの操作で大文字と小文字が区別されます。特にファイル システムと環境変数へのアクセスでは大文字と小文字が区別されます。
PowerShell は、次の領域のすべてのシステムで大文字と小文字が区別されません。
- 変数名
- 演算子名
- 非ディクショナリ メンバー アクセス
- PowerShell コマンドとエイリアスのコマンド検出。 これにより、ExternalScript コマンドと Application コマンドは除外されます。
- パラメーター名とエイリアス
- PowerShell 言語キーワード
-
using namespaceステートメント - 型リテラル
-
#Requiresステートメント - コメントベースのヘルプ キーワード
- PSProvider の名前
- PSDrive 名
- スコープ修飾子
特殊なケース
モジュール名では大文字と小文字が区別されません (例外あり)
モジュールの 名 は、純粋に PowerShell の概念であり、大文字と小文字を区別せずに扱われます。 ただし、フォルダー名への強力なマッピングがある場合には、ベースとなるオペレーティング システムでは大文字と小文字が区別される可能性があります。 大文字と小文字を区別しない同じ名前の 2 つのモジュールをインポートする場合、同じ名前の 2 つのモジュールを異なるパスからインポートする場合と同じ動作になります。
モジュールの名前は、インポートされたケースを使用してセッション状態に格納されます。 セッション状態に格納されている名前は、新しいヘルプ ファイルを探すときに
Update-Helpによって使用されます。 Microsoft のヘルプ ファイルを提供する Web サービスでは、大文字と小文字が区別されるファイル システムが使用されます。 モジュールのインポート名の大文字小文字が一致しない場合、Update-Helpはヘルプファイルを見つけられず、エラーを報告します。-
FileSystemプロバイダーとEnvironmentプロバイダーは、Windows 以外のシステムでは大文字と小文字が区別されます。 一般に、パスまたは環境変数を含む操作は、このようなシステムでは大文字と小文字が区別されます。ただし、システムに関係なく、プロバイダー コマンドレットによるワイルドカード照合では大文字と小文字が区別されません。
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 では通常、大文字と小文字を区別しない方法で列挙型が処理されます。
- 次のような一般的な PowerShell 演算子に対して同等の .NET メソッド (明示的なオプトインなし)
-Uniqueコマンドレット:-
Select-Object -UniqueとGet-Uniqueでは、既定では大文字と小文字が区別されます。-CaseInsensitiveスイッチは PS v7.4 で追加されました。 -
Sort-Object -Uniqueは既定では大文字と小文字が区別されませんが、常に-CaseSensitiveスイッチが設定されています。
-
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:-
-AsHashtablePS v6 に追加されました。 PS v7.3 では、このパラメーターが指定されたときに JSON キーを大文字と小文字が区別されるように変更されました。- パラメーターを使用すると、
Management.Automation.OrderedHashtable型のオブジェクトが生成されます。このオブジェクトには大文字と小文字が区別されます。 - パラメーターがない場合、JSON キーは大文字と小文字を区別しないものとして扱われます。 出力はカスタム オブジェクトです。最後の大文字と小文字を区別しないキーが優先されます。
- パラメーターを使用すると、
- https://github.com/PowerShell/PowerShell/issues/19928
-
-
既定では大文字と小文字は区別されませんが、
-CaseSensitiveスイッチがあります。Windows PowerShell v5.1 では、
-CaseSensitiveと-AsHashtableでは、大文字と小文字を区別しないハッシュテーブルが生成されます。 キーが重複するとエラーが発生します。[pscustomobject] @{ Foo = 'Bar' }, [pscustomobject] @{ Foo = 'bar' } | Group-Object -Property Foo -CaseSensitive -AsHashtableGroup-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.GroupObjectCommandPowerShell v7 以降では、
-CaseSensitiveと-AsHashtableでは、大文字と小文字が区別されるハッシュテーブルが生成されます。 キーが重複してもエラーは発生しません。[pscustomobject] @{ Foo = 'Bar' }, [pscustomobject] @{ Foo = 'bar' } | Group-Object -Property Foo -CaseSensitive -AsHashtableName Value ---- ----- Bar {@{Foo=Bar}} bar {@{Foo=bar}}
-
- 既定では大文字と小文字は区別されませんが、
-CaseSensitiveスイッチがあります。
- 既定では大文字と小文字は区別されませんが、
Get-Commandコマンドの検出/呼び出し:- 大文字と小文字を区別するファイル システムでは、
ExternalScriptコマンドとApplicationコマンドの検出と呼び出しでは大文字と小文字が区別されます。 -
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と-isplitでは大文字と小文字が区別されません。-csplitは、IgnoreCaseオプションが指定されていない限り、大文字と小文字が区別されます。'Bar' -csplit 'A', 0 # Bar 'Bar' -csplit 'A', 0, 'IgnoreCase' # B # r
タブ補完:
- 大文字と小文字を区別するファイル システムでは、タブ補完と glob の両方で大文字と小文字が区別されません。 たとえば、linux で
./Foo.txtするには、TabExpansion2 -inputScript ./fooが完了します。
- 大文字と小文字を区別するファイル システムでは、タブ補完と glob の両方で大文字と小文字が区別されません。 たとえば、linux で
usingステートメント:- 大文字と小文字が区別されるファイル システムでは、パスが指定されている場合、
using moduleとusing assemblyでは大文字と小文字が区別されます。 -
using moduleモジュール名だけで大文字と小文字は区別されません。 -
using namespaceは常に大文字と小文字が区別されません。
- 大文字と小文字が区別されるファイル システムでは、パスが指定されている場合、
特殊文字:
-
`nなどのエスケープ シーケンスでは、大文字と小文字が区別されます。
-
こちらも参照ください
PowerShell