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の解説および実行例を追加しました。
