What's the best way to determine the location of the current PowerShell script?
# 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}