【问题标题】:relative path in Import-ModuleImport-Module 中的相对路径
【发布时间】:2019-02-26 10:35:35
【问题描述】:

我的目录结构如下:

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,它可以正常工作。 我在这里错过了什么?

【问题讨论】:

  • 您确定您没有尝试在 script1.ps1 中导入任何内容,因为我已经尝试过并且效果很好?
  • 尝试将 -verbose 添加到您的导入中,看看是否会引发任何线索。

标签: powershell powershell-2.0


【解决方案1】:

当您使用相对路径时,它基于当前位置(通过 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

【讨论】:

  • 你的回答很好,但是当我说 Write-Host $scriptDir 时,它显示 C:\TFS\ChildScript。有没有办法更上一层楼并在那里获得 C:\TFS ?我添加了一个 $scriptDir1 = Split-Path -Parent $scriptDir 它给了我 C:\TFS 这是我想要的,但我想知道我是否可以在第一个语句中添加某种“升级”参数。
  • 没关系。我在最后又加了一根管子。拆分路径-parent $MyInvocation.MyCommand.Path |分裂-父母。感谢您的帮助。
  • join-path 比自己添加反斜杠要好。
【解决方案2】:

为此的新方法是$PSScriptRoot

Import-Module $PSScriptRoot\Script1.ps1

漂亮的小班轮。

【讨论】:

    【解决方案3】:

    这对我有用:

    $selfPath = (Get-Item -Path "." -Verbose).FullName
    $dllRelativePath = "........"
    $dllAbsolutePath = Join-Path $selfPath $dllRelativePath
    Import-Module $dllAbsolutePath
    

    【讨论】:

      猜你喜欢
      • 2020-01-18
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 2011-06-15
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多