Ich habe eine Verzeichnisstruktur, die so aussieht:
C:\TFS\MasterScript\Script1.ps1
C:\TFS\ChildScript\Script2.ps1
Was ich tun möchte, ist den relativen Pfad in Script2.ps1 anzugeben, um im Verzeichnis hirearchy nach Script1.ps1 zu suchen.
Das habe ich in Script2.ps1 ausprobiert:
Import-Module ../MasterScript/Script1.ps1
aber es funktioniert nicht und sagt, dass es das Modul nicht finden kann.
Wenn ich Import-Module C:\TFS\MasterScript\Script1.ps1
sage, funktioniert es gut ... Was fehlt mir hier?
Wenn Sie einen relativen Pfad verwenden, basiert er auf dem aktuellen Standort (über Get-Location abgerufen) und nicht auf dem Standort des Skripts. Versuchen Sie es stattdessen:
$ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path
Import-Module $ScriptDir\..\MasterScript\Script.ps1
In PowerShell v3 können Sie die automatische Variable $PSScriptRoot
in Skripts verwenden, um Folgendes zu vereinfachen:
# PowerShell v3 or higher
#requires -Version 3.0
Import-Module $PSScriptRoot\..\MasterScript\Script.ps1
Das hat für mich funktioniert:
$selfPath = (Get-Item -Path "." -Verbose).FullName
$dllRelativePath = "........"
$dllAbsolutePath = Join-Path $selfPath $dllRelativePath
Import-Module $dllAbsolutePath
Die neue Methode hierfür ist $PSScriptRoot
Import-Module $PSScriptRoot\Script1.ps1
Netter kleiner Liner.