web-dev-qa-db-fra.com

chemin relatif dans Import-Module

J'ai une structure de répertoire qui ressemble à ceci:

C:\TFS\MasterScript\Script1.ps1
C:\TFS\ChildScript\Script2.ps1

Ce que je veux faire est de spécifier le chemin relatif dans Script2.ps1 pour rechercher Script1.ps1 dans le répertoire hirearchy.

C'est ce que j'ai essayé dans Script2.ps1:

Import-Module ../MasterScript/Script1.ps1

mais cela ne fonctionne pas et dit qu'il ne peut pas trouver le module.

Si je dis Import-Module C:\TFS\MasterScript\Script1.ps1, cela fonctionne très bien . Qu'est-ce qui me manque ici?

26
Asdfg

Lorsque vous utilisez un chemin relatif, il est basé sur l'emplacement actuel (obtenu via Get-Location) et non sur l'emplacement du script. Essayez ceci à la place:

$ScriptDir = Split-Path -parent $MyInvocation.MyCommand.Path
Import-Module $ScriptDir\..\MasterScript\Script.ps1

Dans PowerShell v3, vous pouvez utiliser la variable automatique $PSScriptRoot dans les scripts pour simplifier ceci:

# PowerShell v3 or higher

#requires -Version 3.0
Import-Module $PSScriptRoot\..\MasterScript\Script.ps1
53
Keith Hill

Cela a fonctionné pour moi:

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

La nouvelle méthode utilisée est $PSScriptRoot

Import-Module $PSScriptRoot\Script1.ps1

Beau petit paquebot.

1
Rthomas529