Вызов функции в другом скрипте при выполнении с помощью «Выполнить с помощью PowerShell» - PullRequest
45 голосов
/ 14 декабря 2011

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

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

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

Рабочий файл

. {c:\scratch\b.ps1}

ShowMessage "Hello"

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

Ответы [ 2 ]

73 голосов
/ 14 декабря 2011

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

. "c:\scratch\b.ps1"

ShowMessage "Hello"

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

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

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

14 голосов
/ 14 декабря 2011

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

=================== 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 ======================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...