Подтвердить что ты не робот

Относительный путь в 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, он отлично работает. Что мне здесь не хватает?

4b9b3361

Ответ 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