relative path in Import-Module
I have directory structure that looks like this:
C:\TFS\MasterScript\Script1.ps1
C:\TFS\ChildScript\Script2.ps1
What i want to do is specify the relative path in Script2.ps1 to look for Script1.ps1 in the directory hirearchy.
This is what i tried in Script2.ps1:
Import-Module ../MasterScript/Script1.ps1
but it does not work and says it cannot find the module.
If i say Import-Module C:\TFS\MasterScript\Script1.ps1
, it works fine.
What am i missing here?
When you use a relative path, it is based off the currently location (obtained via Get-Location) and not the location of the script. Try this instead:
$ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path
Import-Module $ScriptDir\..\MasterScript\Script.ps1
In PowerShell v3, you can use the automatic variable $PSScriptRoot
in scripts to simplify this to:
# PowerShell v3 or higher
#requires -Version 3.0
Import-Module $PSScriptRoot\..\MasterScript\Script.ps1
The new Method for this is $PSScriptRoot
Import-Module $PSScriptRoot\Script1.ps1
Nice little one liner.
This worked for me:
$selfPath = (Get-Item -Path "." -Verbose).FullName
$dllRelativePath = "........"
$dllAbsolutePath = Join-Path $selfPath $dllRelativePath
Import-Module $dllAbsolutePath