2016-09-22 2 views
1

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

Например мой файл «Main.ps1» выглядит примерно следующим образом:

. .\UtilityFunctions.ps1 

function Main-Routine 
{ 
    utility-method 
} 

Main-Routine 

Мои UtilityFunctions.ps1 выглядит примерно следующим образом:

function utility-method 
{ 
    "{0}.{1}" -f $MyInvocation.ScriptName, $MyInvocation.MyCommand 
} 

Это выводит на консоль следующим образом :

mypath \ Main.ps1.utility-метод

Я хочу, чтобы напечатать вместо этого:

mypath \ UtilityFunctions.ps1.utility-метод

Это кажется вызовом $ MyInvocation всегда возвращает имя файла, который вызывается при запуске, а не имя файла, где функция существует. Как получить имя файла, содержащего мою функцию?

ответ

3

Я считаю, что вы ищете хранятся в объекте, возвращаемого Get-Command

(Get-Command Utility-Method).ScriptBlock.File 

Он должен работать как для функций, определенных в сценариях точечных источников, как функции в модулях.

+1

безупречный, спасибо. Я изменил следующим образом, чтобы он был общим: (Get-Command $ MyInvocation.MyCommand) .ScriptBlock.File – Paul

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