У меня есть 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 Включена полная обработка ошибок. Подстраивайтесь под свои нужды соответственно.