2014-10-08 3 views
4

Есть ли способ получить путь к скрипту, который импортировал модуль из этого модуля?Получить путь от импортирующего скрипта из модуля?

Модуль сценария, который я пишу, предназначен для загрузки настроек из файлов относительно сценария импорта. Я планирую повторно использовать модуль для ряда проектов, поэтому я бы предпочел, чтобы модуль не мог делать никаких предположений о том, откуда его импортировать.

Приятно иметь, было бы замечательно, что модуль может быть как можно более неявным. Если все остальное не удается, я могу просто передать номер вызывающего абонента в его местоположение.

К сожалению, все, что я попытался до сих пор, возвращает путь к модулю (а не то, что импортировало его). Вот простая демонстрация:


Тест-RelativeModule.ps1, Хранится в: C: \ Test \

import-module "$PSScriptRoot\mod\Test.psm1" 

Test.psm1, Хранится в: с: \ test \ mod \

# returns 'c:\test\mod' 
write-host "`$PSScriptRoot: $PSScriptRoot" 

# returns 'c:\test\mod' 
# The value of $MyInvocation.MyCommand.Path is 'c:\test\mod\Test.psm1' 
write-host "Split Invoation: $(Split-Path $MyInvocation.MyCommand.Path)" 

# returns whatever path the console is currently residing 
write-host "Resolve Path: $((resolve-path '.\').path)" 

# what I'm looking for is something to return 'c:\test' from within the module 
# without making any assumptions about the folder structure 

ответ

4

Попробуйте это :

Write-Host "My invoker's PSScriptRoot: $($MyInvocation.PSScriptRoot)" 
+0

* So close *! 'Split-Path' не требуется. Просто: 'Write-Host 'Invoker: $ ($ MyInvocation.PSScriptRoot)" '- Редактировать, и я соглашусь. Благодаря! – klyd

+0

Я обновил ответ. –

Смежные вопросы