Включить относительные файлы в PowerShell
Я хотел бы включить файлы скриптов с таким псевдо синтаксисом:
Include '.scripA.ps1'
но единственное, что я нашел что-то вроде этого:
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.scriptA.ps1')
это мерзко.
есть хороший способ включения скриптов с относительными путями?
6 ответов:
к сожалению, нет, нет хорошего способа. PowerShell на самом деле не очень хорошо поддерживает эту идею в V1. Действительно подход, который вы принимаете, является лучшим подходом
вы можете поставить точку-источник (включить) файл:
. .\скрипта.пс1
чтобы получить полный путь к скрипту:
Resolve-Path. \scriptA. ps1
Dot-sourcing-это самый простой вариант, хотя и не особенно красивый, как уже говорилось. Однако, этот формат делает его просто немного чище:
$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path . (Join-Path $ScriptDirectory ScriptA.ps1)
кроме того, заметка о относительные пути это полезно сделать явным: исходный пост может показаться, что требуется путь относительно текущий рабочий каталог; в действительности намерение состоит в том, чтобы быть относительно исходный каталог текущего скрипта (как собственный код alex2k8 образец показывает). Таким образом, это позволяет текущему скрипту получить доступ к другим скриптам из того же репозитория.
начиная с версии V2 (родной, начиная с Win7 / 2008R2; см.
$psversiontable.psversion
) вы можете легко включить такой файл:. "RelativeOrAbsolutePathToFile\include.ps1" $result = FunctionInIncludeFile()
ссылки:
как повторно использовать функции Windows powershell в скриптах
Это, вероятно, будет работать из любого каталога, но это будет sloooooowwwww, если ваш начальный каталог не является прямым каталогом-предшественником файла, который вы пытаетесь включить. IOW, если вашей отправной точкой для этого поиска является корень c:\ или какая-либо другая буква диска, это, вероятно, будет ужасно медленно.
. $(Resolve-Path-literal $(GCI-Recurse include. ps1))
Это будет работать особенно хорошо, если вы разрабатываете сценарии на вашем компьютере, но нужно разверните их на сервере, который будет выполнять сценарий как запланированную задачу.