What's the best way to determine the location of the current PowerShell script? What's the best way to determine the location of the current PowerShell script? powershell powershell

What's the best way to determine the location of the current PowerShell script?


PowerShell 3+

# This is an automatic variable set to the current file's/module's directory$PSScriptRoot

PowerShell 2

Prior to PowerShell 3, there was not a better way than querying theMyInvocation.MyCommand.Definition property for general scripts. I had the following line at the top of essentially every PowerShell script I had:

$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition


If you are creating a V2 Module, you can use an automatic variable called$PSScriptRoot.

From PS > Help automatic_variable

$PSScriptRoot       Contains the directory from which the script module is being executed.       This variable allows scripts to use the module path to access other       resources.


For PowerShell 3.0

$PSCommandPath    Contains the full path and file name of the script that is being run.     This variable is valid in all scripts.

The function is then:

function Get-ScriptDirectory {    Split-Path -Parent $PSCommandPath}