Подтвердить что ты не робот

Вызов функции в другом скрипте при выполнении с помощью "Выполнить с помощью PowerShell"

У меня есть функции в "библиотечном" файле, которые нужно вызывать из моего "рабочего" скрипта.

Библиотечный файл

function ShowMessage($AValue)
{
  $a = new-object -comobject wscript.shell
  $b = $a.popup( $AValue )
}

Рабочий файл

. {c:\scratch\b.ps1}

ShowMessage "Hello"

Выполнение сценария 'worker' работает нормально, когда в IDE PowerShell, но когда я щелкаю правой кнопкой мыши рабочий файл и выбираю 'Run with PowerShell', он не может найти функцию 'ShowMessage'. Оба файла находятся в одной папке. Что может происходить?

4b9b3361

Ответ 1

В рабочем файле измените на это:

. "c:\scratch\b.ps1"

ShowMessage "Hello"

Как @RoiDanton упоминается ниже:

Внимание при использовании относительного пути: не забудьте поставить перед точкой точку. ".\B.ps1".

Первая точка - это оператор, используемый для изменения области действия, и в этом контексте он не имеет ничего общего с путями. См. Точечная нотация.

Ответ 2

В вашем рабочем файле, dot-source файл библиотеки, он загрузит весь контент (функции, переменные и т.д.) в глобальную область, а затем вы сможете вызывать функции из файла библиотеки.

=================== Worker file ==========================
# dot-source library script
# notice that you need to have a space 
# between the dot and the path of the script
. c:\library.ps1

ShowMessage -AValue Hello
=================== End Worker file ======================