Относительный путь в Import-Module
У меня есть структура каталогов, которая выглядит так:
C:\TFS\MasterScript\Script1.ps1
C:\TFS\ChildScript\Script2.ps1
Что я хочу сделать, так это указать относительный путь в Script2.ps1, чтобы искать Script1.ps1 в каталоге архарихи.
Вот что я пробовал в Script2.ps1:
Import-Module ../MasterScript/Script1.ps1
но он не работает и говорит, что он не может найти модуль.
Если я скажу Import-Module C:\TFS\MasterScript\Script1.ps1
, он отлично работает.
Что мне здесь не хватает?
Ответы
Ответ 1
Когда вы используете относительный путь, он основан на текущей позиции (полученной через Get-Location), а не на местоположении script. Вместо этого попробуйте:
$ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path
Import-Module $ScriptDir\..\MasterScript\Script.ps1
В PowerShell v3 вы можете использовать автоматическую переменную $PSScriptRoot
в сценариях, чтобы упростить ее:
# PowerShell v3 or higher
#requires -Version 3.0
Import-Module $PSScriptRoot\..\MasterScript\Script.ps1
Ответ 2
Это сработало для меня:
$selfPath = (Get-Item -Path "." -Verbose).FullName
$dllRelativePath = "........"
$dllAbsolutePath = Join-Path $selfPath $dllRelativePath
Import-Module $dllAbsolutePath