PowerShellスクリプトを書く際、
「実行中のスクリプト自身のパス」や
「そのスクリプトが置かれているフォルダ」を取得したいケースはよくあります。
特に以下のようなケースでは必須です:
-
ログファイルをスクリプトと同じフォルダに出力したい
-
スクリプトと同階層にある設定ファイル(config.json / .ini / CSV など)を読み込みたい
-
相対パスではなく絶対パスで処理したい
-
バッチ(.cmd)から起動される場合でも確実に処理したい
この記事では、PowerShellでスクリプトの絶対パスとフォルダを取得する方法をわかりやすくまとめます。
🔎 実行中スクリプトの絶対パスを取得する
📌 解説
-
$MyInvocation.MyCommand.Pathは 現在実行中の .ps1 ファイルの絶対パスを返します -
エイリアス、コマンドライン引数、バッチ起動にも対応
📁 スクリプトの実行フォルダ(ディレクトリ)を取得する
または、もっと便利な $PSScriptRoot を使う方法:
📌 $PSScriptRoot の特徴
| 方法 | 違い |
|---|---|
| $PSScriptRoot | PowerShell v3以降で利用可能。モジュールや関数内でも使用OK |
| Split-Path $MyInvocation.MyCommand.Path | v2でも利用可能。互換性が必要な場合に有効 |
💡 ログや設定ファイルを同じフォルダに出力する例
💡 設定ファイルの読み込み例(同階層のconfig.jsonを読む)
🚀 バッチファイルから実行する場合でも問題なし
PowerShell側で $PSScriptRoot や $MyInvocation.MyCommand.Path を使っていれば、
バッチ起動であっても正しくスクリプト配置パスを取得可能です。
📌 まとめ
| 目的 | 推奨コード |
|---|---|
| スクリプトの絶対パスを取得 | $MyInvocation.MyCommand.Path |
| スクリプトのフォルダを取得 | $PSScriptRoot または Split-Path |
| 同階層へのファイル出力 | Join-Path $PSScriptRoot |
PowerShellでは、パスを固定せずスクリプトの実行場所から動的に処理することが重要です。
設定ファイルの読み込み・ログ出力・ファイル操作まで柔軟に対応できるようになります。
