49

我的目录结构如下所示:

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

我想要做的是在 Script2.ps1 中指定相对路径以在目录hirearchy 中查找 Script1.ps1。

这是我在 Script2.ps1 中尝试过的:

Import-Module ../MasterScript/Script1.ps1

但它不起作用,并说它找不到模块。

如果我说Import-Module C:\TFS\MasterScript\Script1.ps1,它工作正常。我在这里想念什么?

4

3 回答 3

89

当您使用相对路径时,它基于当前位置(通过 Get-Location 获得)而不是脚本的位置。试试这个:

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

在 PowerShell v3 中,您可以在脚本中使用自动变量$PSScriptRoot将其简化为:

# PowerShell v3 or higher

#requires -Version 3.0
Import-Module $PSScriptRoot\..\MasterScript\Script.ps1
于 2013-01-17T16:06:53.290 回答
12

新的方法是$PSScriptRoot

Import-Module $PSScriptRoot\Script1.ps1

漂亮的小班轮。

于 2018-12-27T17:13:45.390 回答
4

这对我有用:

$selfPath = (Get-Item -Path "." -Verbose).FullName
$dllRelativePath = "........"
$dllAbsolutePath = Join-Path $selfPath $dllRelativePath
Import-Module $dllAbsolutePath
于 2014-06-20T11:08:55.677 回答