Как я могу получить расположение файловой системы скрипта PowerShell? - PullRequest
59 голосов
/ 08 сентября 2010

У меня есть сценарий PowerShell, расположенный по адресу D:\temp.

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

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

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

Ответы [ 3 ]

125 голосов
/ 08 сентября 2010

PowerShell 3 +

Путь запущенных скриптов:

$PSCommandPath

Его каталог:

$PSScriptRoot

PowerShell 2

Путь запущенных скриптов:

$MyInvocation.MyCommand.Path

Его каталог:

$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
10 голосов
/ 08 сентября 2010

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

0 голосов
/ 03 апреля 2019

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

Write-Host "Path: $scriptPath"

HTH

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...