wake-up-neo.net

relativer Pfad im Import-Modul

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?

26
Asdfg

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
53
Keith Hill

Das hat für mich funktioniert:

$selfPath = (Get-Item -Path "." -Verbose).FullName
$dllRelativePath = "........"
$dllAbsolutePath = Join-Path $selfPath $dllRelativePath
Import-Module $dllAbsolutePath
3
Rok Strniša

Die neue Methode hierfür ist $PSScriptRoot

Import-Module $PSScriptRoot\Script1.ps1

Netter kleiner Liner.

1
Rthomas529