Chcę zaimportować zewnętrzną funkcję z pliku, nie konwertując jej do modułu (mamy setki plików na funkcję, więc traktuj wszystkie jako moduły przesadnie) .Funkcje dot-sourcingowe z pliku do globalnego zasięgu wewnątrz funkcji
Oto wyjaśnienie kodu. Proszę zauważyć, że mam trochę dodatkowej logiki w funkcji importu, jak np. Dodawanie skryptu do folderu głównego i sprawdzanie istnienia pliku oraz zgłaszanie specjalnego błędu, aby uniknąć tego duplikowania kodu w każdym skrypcie, który wymaga tego rodzaju importu.
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!'
Czy istnieje jakiś podstęp, kropka źródła do zasięgu globalnym?
Dziękuję bardzo, ta fajna hacha działa. Dodałem kilka drobnych poprawek, żeby działały, jeśli nie masz nic przeciwko. –
Nie zwracaj na to uwagi. Chciałem tylko przekazać pomysł, niekoniecznie kompletne, gotowe rozwiązanie. – mjolinor
@AntonPurin można zaktualizować odpowiedź, aby uwzględnić "drobne poprawki"? –