При загрузке модуля через #Requires -Module, невозможно получить путь или имя исходного скрипта через $ MyInvocation - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь найти общий способ получения имени и пути скрипта при импорте модуля.У меня есть три проблемы, и я не смог понять, как заставить основной работать.Вот мой код теста1) Import-Module из командной строки, callstack возвращает <ScriptBlock>

callstack = ModuleGroup.psm1; <ScriptBlock>
ScriptName = 
PSScriptRoot = 
PSCommandPath = 
Location = D:\Powershell
Done...

2) Скрипт с использованием Import-Module возвращает полное MyInvocation information

callstack = ModuleTest.psm1; Test.ps1
ScriptName = **D:\Powershell\psModules\ModuleTest\1.0\Tests\Test.ps1**
PSScriptRoot = D:\Powershell\psModules\ModuleTest\1.0\Tests
PSCommandPath = D:\Powershell\psModules\ModuleTest\1.0\Tests\Test.ps1
Location = D:\Powershell
Done...

3) Использование оператора #Requires -Module возвращает нет информации о вызывающем абоненте.(удаление модуля между тестами)

callstack = ModuleTest.psm1
ScriptName = 
PSScriptRoot = 
PSCommandPath = 
Location = D:\Powershell
Done...

Я искал и тестировал, пробовал области и $ script / $ global и все, что мог придумать.Я бы предпочел, чтобы код модуля извлекал значения, а не скрипт, передающий их, так что мне не нужно быть внимательным каждый раз, когда я хочу сослаться на модуль.

Если ничего другого, я не позволю #Требует и выдать ошибку, когда в MyInvocation ничего нет.

1 Ответ

0 голосов
/ 12 сентября 2018

Переменные $ MyInvocation устанавливаются только после вызова скриптов, функций и блоков скриптов. Таким образом, переменная не устанавливается при использовании командной строки. Заявление Требование не должно влиять на это.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-6#myinvocation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...