PowerShell ps1ファイル自身のパス取得は$PSScriptRootを使う

PowerShellカテゴリを表すパンダのイラスト PowerShell

PowerShellスクリプト(.ps1ファイル)の実行時に、そのスクリプトファイル自身が存在するディレクトリのパスや、ファイル自身のフルパスを取得するには、自動変数の $PSScriptRoot$PSCommandPath を使用します。

よくある誤りとしてカレントディレクトリを取得する Get-Location(または pwd)を使用する方法がありますが、これではスクリプトを呼び出した側の作業ディレクトリ(コンソールで開いている場所)が取得されてしまい、スクリプト自体の場所とは一致しない原因になります。

この記事でできること

PowerShellスクリプト自身を基準にしたファイル読み込みやログ出力パスの指定を、実行場所に関わらず正確に行うことができます。

前提条件

  • Windows PowerShell 5.1 または PowerShell 7 以降
  • PowerShell スクリプトファイル(.ps1)として保存して実行していること(コンソールに直接入力した場合は空になります)

スクリプト自体のパスを取得するコード例

以下のコードを get_path.ps1 などの名前で保存して実行してください。

# スクリプトファイルが存在するフォルダのパス(末尾に円マークは含まれません)
$ScriptDir = $PSScriptRoot
Write-Output "スクリプトのディレクトリ: $ScriptDir"

# スクリプトファイル自身のフルパス
$ScriptPath = $PSCommandPath
Write-Output "スクリプトのフルパス: $ScriptPath"

# スクリプトと同じフォルダにある設定ファイルを安全に読み込む例
$ConfigFilePath = Join-Path $PSScriptRoot "config.json"
Write-Output "設定ファイルのパス: $ConfigFilePath"

期待される出力例

スクリプトのディレクトリ: C:\scripts
スクリプトのフルパス: C:\scripts\get_path.ps1
設定ファイルのパス: C:\scripts\config.json

Get-Location との違いと注意点

Get-Location は「今ユーザーがどのディレクトリでコマンドを実行しているか」を返します。そのため、Cドライブのルートから別の場所にあるスクリプトを呼び出した場合、Get-Location の結果はCドライブのルートになりますが、$PSScriptRoot は常にスクリプトファイルが存在する場所を返します。

注意点として、PowerShellコンソールに1行ずつ直接コードを貼り付けて実行(対話式実行)した場合、$PSScriptRoot は空になります。必ず .ps1 ファイルとして保存して実行してください。

参考リンク

Microsoft公式: about_Automatic_Variables – PowerShell | Microsoft Learn

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 変更カレントディレクトリを取得するGet-Locationから、スクリプト自身のディレクトリを取得する$PSScriptRootを使用するように修正しました。
  • 追加スクリプトファイル自身のフルパスを取得するための$PSCommandPathと$PSScriptRootの解説および実行例を追加しました。

文書情報

記事タイトル
PowerShell ps1ファイル自身のパス取得は$PSScriptRootを使う
作成日
更新日
Source URL
https://papanda925.com/?p=1847

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました