Вызов функции в другом скрипте при выполнении с помощью "Выполнить с помощью 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'. Оба файла находятся в одной папке. Что может происходить?
Ответы
Ответ 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 ======================