Я хочу импортировать внешнюю функцию из файла, а не преобразовывать ее в модуль (у нас есть сотни файлов для каждой функции, поэтому относиться ко всем их как к модулям является чрезмерным) ,Dot-sourcing функции из файла в глобальную область внутри функции
Вот код пояснения. Обратите внимание, что у меня есть дополнительная логика в функции импорта, например, добавление корневой папки сценариев и проверка существования файла и специальная ошибка броска, чтобы избежать дублирования кода в каждом скрипте, который требует такого импорта.
C: \ Repository \ Foo.ps1:
Function Foo {
Write-Host 'Hello world!'
}
C: \ InvocationTest.ps1:
# Wrapper func
Function Import-Function ($Name) {
# Checks and exception throwing are omitted
. "C:\Repository\$name.ps1"
# Foo function can be invoked in this scope
}
# Wrapped import
Import-Function -Name 'Foo'
Foo # Exception: The term 'Foo' is not recognized
# Direct import
. "C:\Repository\Foo.ps1"
Foo # 'Hello world!'
Есть ли трюк, чтобы точка источника в глобальном масштабе?
Большое спасибо, этот приятный хач работает. Я добавил несколько незначительных исправлений, чтобы заставить его работать, если вы не возражаете. –
Не возражайте. Я просто пытался передать идею, а не обязательно готовое решение. – mjolinor
@AntonPurin вы можете обновить ответ, включив в него свои «незначительные исправления»? –