Как получить расположение файловой системы PowerShell script?

У меня есть PowerShell script, расположенный в D:\temp.

Когда я запускаю этот script, я хочу, чтобы текущее местоположение файла было перечислено. Как это сделать?

Например, этот код выполнит его в пакетном файле DOS; Я пытаюсь преобразовать это в PowerShell script...

FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"

Ответ 1

PowerShell 3 +

Путь выполняемых скриптов:

$PSCommandPath

Его каталог:

$PSScriptRoot

PowerShell 2

Путь выполняемых скриптов:

$MyInvocation.MyCommand.Path

Его каталог:

$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent

Ответ 2

Роман Кузьмин ответил на вопрос imho. Я просто добавлю, что если вы импортируете модуль (через Import-Module), вы можете получить доступ к автоматической переменной $PsScriptRoot внутри модуля, которая сообщит вам, где находится модуль.

Ответ 3

Для чего это стоит, я обнаружил, что это работает для меня на PowerShell V5 в сценариях и в 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 path"
            exit 1
        }
    }
} catch {
    Write-Host -ForegroundColor Red "Caught Exception: $($Error[0].Exception.Message)"
    exit 2
}

Write-Host "Path: $scriptPath"

НТН

PS Включена полная обработка ошибок. Подстраивайтесь под свои нужды соответственно.