簡単な説明
PowerShell の完全パス形式と相対パス形式について説明します。
長い説明
PowerShell プロバイダーを介してアクセスできるデータ ストア内のすべての項目は、パス名によって一意に識別できます。 パスは、項目名、項目が配置されているコンテナーとサブコンテナー、およびコンテナーにアクセスする PowerShell ドライブの組み合わせです。
PowerShell では、パス名には、完全修飾 と相対 の 2 種類のいずれかを指定できます。 完全修飾パスは、パスを構成するすべての要素で構成されます。 次の構文は、完全修飾パス内の要素を示しています。
[<provider>::]<drive>:[\<container>[\<subcontainer>...]]\<item>
<provider> プレースホルダーは、データ ストアにアクセスする PowerShell プロバイダーを指します。 たとえば、FileSystem プロバイダーを使用すると、コンピューター上のファイルとディレクトリにアクセスできます。 この構文の要素は省略可能であり、ドライブ名はすべてのプロバイダーで一意であるため、必要ありません。
<drive> プレースホルダーは、特定の PowerShell プロバイダーでサポートされている PowerShell ドライブを指します。 FileSystem プロバイダーの場合、PowerShell ドライブはシステムで構成されている Windows ドライブにマップされます。
たとえば、システムに A: ドライブと C: ドライブが含まれている場合、FileSystem プロバイダーは PowerShell で同じドライブを作成します。
ドライブを指定したら、その項目を含むコンテナーとサブコンテナーを指定する必要があります。 コンテナーは、データ ストアに存在する階層的な順序で指定する必要があります。 つまり、親コンテナー、その親コンテナー内の子コンテナーから始めて、各子コンテナーのパターンを繰り返す必要があります。 さらに、各コンテナーの前に円記号を付ける必要があります。
手記
PowerShell を使用すると、バックスラッシュまたはスラッシュを使用して、他のプラットフォームの PowerShell との互換性を確保できます。 これは PowerShell コマンドでは機能しますが、ネイティブ ディレクトリ区切り記号のみを想定するネイティブ アプリケーションで使用する場合は機能しない場合があります。
[System.IO.Path]::DirectorySeparatorChar を使用して、プラットフォームで使用される文字を見つけます。
コンテナーとサブコンテナーを指定した後、項目名の前に円記号を付けて指定する必要があります。 たとえば、Shell.dll ディレクトリ内の C:\Windows\System32 ファイルの完全修飾パス名は次のとおりです。
C:\Windows\System32\Shell.dll
この場合、コンテナーにアクセスするドライブは C: ドライブ、最上位レベルのコンテナーは Windows、サブコンテナーは System32、項目は Shell.dll。
状況によっては、完全修飾パスを指定する必要がなく、代わりに相対パスを使用できます。 PowerShell を使用すると、現在の作業場所に対する相対的な位置に基づいて項目を識別できます。
PowerShell では、次の文字シーケンスを使用して相対パスを指定します。
- (
.) - 現在の場所 - (
..) - 現在の場所の親 - (
\) - 現在の場所のルート
次の例は、C:\Windowsに設定されている現在の作業ディレクトリに基づいています。
- 相対パス
.\SystemはC:\Windows\Systemとして解決されます - 相対パス
..\Program FilesはC:\Program Filesとして解決されます - 相対パス
\Program FilesはC:\Program Filesとして解決されます - 相対パス
SystemはC:\Windows\Systemとして解決されます
コマンドでパスを使用する場合は、完全修飾パスまたは相対パスを使用できます。 たとえば、現在の作業ディレクトリが C:\Windowsしているとします。 次の Get-ChildItem コマンドは、C:\TechDocs ディレクトリ内のすべての項目を取得します。
Get-ChildItem \TechDocs
円記号は、現在の作業場所のドライブ ルートを使用する必要があることを示します。 作業ディレクトリは C:\Windowsされているため、ドライブ ルートは C: ドライブです。
TechDocs ディレクトリはルートから離れているため、円記号のみを指定する必要があります。
完全修飾パスを使用すると、同じ結果が得られます。
Get-ChildItem C:\TechDocs
完全修飾パスと相対パス名のどちらを使用するかに関係なく、パスが重要なのは、アイテムが検索されるだけでなく、その項目が別のコンテナー内の別の項目と同じ名前を共有している場合でも、項目を一意に識別するためです。
たとえば、それぞれ Results.txtという名前の 2 つのファイルがあるとします。 最初のファイルは C:\TechDocs\Janという名前のディレクトリにあり、2 番目のファイルは C:\TechDocs\Febという名前のディレクトリにあります。 最初のファイル (C:\TechDocs\Jan\Results.txt) のパスと 2 番目のファイル (C:\TechDocs\Feb\Results.txt) のパスを使用すると、2 つのファイルを明確に区別できます。
Win32 ファイル名前空間のサポート
Windows では、FileSystem プロバイダーをサポートするコマンドレットは、Win32 ファイル名前空間形式を使用するパスもサポートします。 これらのパスは、コマンドレットの LiteralPath パラメーターでのみ使用できます。
Win32 ファイル名前空間のパスには、プレフィックスとして \\?\が付いています。 このプレフィックスは、すべての文字列解析を無効にし、その後の文字列をファイル システムに直接送信するように Windows API に指示します。 たとえば、ファイル システムが大きなパスとファイル名をサポートしている場合は、Windows API によって強制される MAX_PATH 制限を超えることができます。
詳細については、「名前付けファイル、パス、および名前空間 の Win32 ファイル名前空間 を参照してください。
こちらも参照ください
PowerShell