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?
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
Cela a fonctionné pour moi:
$selfPath = (Get-Item -Path "." -Verbose).FullName
$dllRelativePath = "........"
$dllAbsolutePath = Join-Path $selfPath $dllRelativePath
Import-Module $dllAbsolutePath
La nouvelle méthode utilisée est $PSScriptRoot
Import-Module $PSScriptRoot\Script1.ps1
Beau petit paquebot.