I have a PowerShell script located at D:\temp
.
Whe开发者_Python百科n I run this script, I want the current location of the file to be listed. How do I do this?
For example, this code would accomplish it in a DOS batch file; I am trying to convert this to a PowerShell script...
FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"
PowerShell 3+
The path of a running scripts is:
$PSCommandPath
Its directory is:
$PSScriptRoot
PowerShell 2
The path of a running scripts is:
$MyInvocation.MyCommand.Path
Its directory is:
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
Roman Kuzmin answered the question imho. I'll just add that if you import a module (via Import-Module
), you can access $PsScriptRoot
automatic variable inside the module -- that will tell you where the module is located.
For what it's worth, I found that this works for me on PowerShell V5 in scripts and in PowerShell ISE:
try {
$scriptPath = $PSScriptRoot
if (!$scriptPath)
{
if ($psISE)
{
$scriptPath = Split-Path -Parent -Path $psISE.CurrentFile.FullPath
} else {
Write-Host -ForegroundColor Red "Cannot resolve script file's path"
exit 1
}
}
} catch {
Write-Host -ForegroundColor Red "Caught Exception: $($Error[0].Exception.Message)"
exit 2
}
Write-Host "Path: $scriptPath"
HTH
P.S. Included full error handling. Adjust to your needs, accordingly.
Here is one example:
$ScriptRoot = ($ScriptRoot, "$PSScriptRoot" -ne $null)[0]
import-module $ScriptRoot\modules\sql-provider.psm1
Import-Module $ScriptRoot\modules\AD-lib.psm1 -Force
精彩评论