Categories: OS

PowerShellのResolve-Pathコマンドを徹底解説!パスの解決と活用方法

PowerShellを使ってスクリプトを書くとき、「指定したパスが実際にどのファイルやフォルダに対応するのか?」と確認したくなることがあります。そんなときに便利なのがResolve-Pathコマンドです。このコマンドを使えば、相対パスやワイルドカードを含む曖昧な指定でも、正確な絶対パスを簡単に取得できます。本記事では、Resolve-Pathの基本的な使い方から応用例までを、初心者にもわかりやすく解説していきます。


Resolve-Pathとは?その役割と基本概要

Resolve-Pathは、指定したファイルやディレクトリのパスを「解決」して、正確な絶対パスを返してくれるPowerShellの標準コマンドレットです。たとえば、相対パスで記述した場合やワイルドカード(*?)を使った指定でも、それが実際にどのファイルやフォルダに該当するのかを明確にしてくれます。

これは、スクリプトの中で特定のファイルを操作する前に存在を確認したり、確実に目的のファイルを処理したりする際にとても有用です。


基本的な使い方:絶対パスを取得する

まずは基本的な使い方を見てみましょう。

Resolve-Path .\Documents

このコマンドは、現在のディレクトリから見たDocumentsというフォルダの絶対パスを返してくれます。実行結果の例は以下の通りです。

Path
----
C:\Users\username\Documents

このように、相対パスを完全な絶対パスに変換してくれるため、スクリプトの中でパスを正確に扱いたい場合に非常に便利です。


ワイルドカードとの併用:複数の一致結果を取得

Resolve-Pathはワイルドカードと組み合わせることで、条件に一致する複数のパスを一度に取得できます。

Resolve-Path C:\Users\*\Documents

この例では、C:\Users以下のすべてのユーザーアカウントにあるDocumentsフォルダのパスを解決します。ユーザーが複数いる場合、それぞれのパスがリストで返されます。


パスが存在しない場合の挙動

存在しないパスを指定すると、Resolve-Pathはエラーを返します。

Resolve-Path .\NotExistFolder
Resolve-Path : パス 'C:\Users\username\NotExistFolder' は存在しません。

このように、存在しないパスを解決しようとすると、警告が出て処理が中断されるため、エラーハンドリングが必要な場面では注意が必要です。


実パスとProviderPathの違い

Resolve-Pathは、オブジェクトとして結果を返します。このオブジェクトには、PathプロパティとProviderPathプロパティが含まれます。

$resolved = Resolve-Path .\Documents
$resolved.Path
$resolved.ProviderPath
  • Path は PowerShellの仮想パス(PSDriveを含む形式)
  • ProviderPath は実際のWindowsファイルシステムのパス

たとえば、PowerShellではレジストリや環境変数もパスとして扱えるため、これらの違いを理解しておくとより高度な使い方ができます。


ファイルシステム以外のプロバイダーにも対応

PowerShellには「プロバイダー」という仕組みがあり、ファイルシステムだけでなく、レジストリや環境変数といったさまざまなリソースをパスとして扱うことができます。

たとえば、環境変数をResolve-Pathで解決するには以下のようにします。

Resolve-Path env:Path

結果は以下のようになります。

Path
----
Env:\Path

このように、env:プロバイダーを使えば環境変数のパスも扱えます。レジストリの場合はHKLM:HKCU:などが使えます。


スクリプト内での実用例:パスの検証と処理分岐

たとえば、指定されたファイルの存在確認をしたい場合に、Resolve-PathTry/Catchを組み合わせることで、柔軟なエラーハンドリングが可能です。

try {
$path = Resolve-Path .\sample.txt
Write-Output "ファイルのパス: $($path.ProviderPath)"
} catch {
Write-Warning "指定されたファイルは存在しません。"
}

このようにすれば、スクリプトの中でパスの存在を確認してから処理を進めることができ、エラーの原因を減らすことができます。


フォルダ名の曖昧な補完にも対応

たとえば、現在のフォルダに「log2023」「log2024」「log2025」といった複数のフォルダがある場合に、次のようにワイルドカードを使って解決できます。

Resolve-Path .\log*

これにより、対象のフォルダすべての絶対パスを一括で取得できます。スクリプトの中でループ処理に使いたい場合などにも非常に便利です。


補足:似たようなコマンドとの違い

Resolve-Pathと似たような機能を持つコマンドとしてTest-PathGet-Itemがあります。それぞれの違いは以下の通りです。

  • Test-Path:パスが存在するかどうかを確認する(ブール値で返す)
  • Get-Item:指定したパスのオブジェクトそのものを取得
  • Resolve-Path:パスを絶対パスに変換して返す

使い分けることで、より強力で安全なスクリプトを作成できます。


まとめ

Resolve-Pathは、PowerShellスクリプトを書くうえで非常に役立つパス解決のツールです。相対パスやワイルドカードを正確な絶対パスに変換できることで、スクリプトの安定性や保守性が向上します。

ポイントをまとめると以下の通りです。

  • 相対パスを絶対パスに変換してくれる
  • ワイルドカードを使った複数パスの解決も可能
  • 存在しないパスにはエラーで対応
  • ファイルシステム以外のプロバイダーにも対応
  • 他のコマンドと組み合わせて柔軟なスクリプトが可能

これからPowerShellでの自動化や管理スクリプトを学んでいきたい方は、ぜひResolve-Pathの使い方をマスターしてみてください。パスに関するトラブルを減らし、よりスマートなコマンド操作ができるようになるでしょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。