49

私は次のようなディレクトリ構造を持っています:

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

私がやりたいのは、Script2.ps1で相対パスを指定して、ディレクトリhierarchyで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

$PSScriptRootPowerShell v3では、スクリプトで自動変数を使用して、これを次のように簡略化できます。

# 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

素敵な小さな1つのライナー。

于 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 に答える