Masz skrypt. Skrypt używa modułu. Podczas instalacji skryptu plik skryptu i moduł zostaną umieszczone w tym samym katalogu. Jak to zrobić, żeby w początkowych linijkach skryptu zidentyfikować w jakim jesteśmy katalogu i załadować z niego moduł?
Proste
import-module .\MyModule.psm1
Nie zadziała, bo .\ oznacza katalog bieżący, który nie musi być zgodny z katalogiem, w którym znajduje się skrypt. Z pomocą przychodzi jednak zmienna $MyInvocation:
$scriptDir = Split-path $MyInvocation.InvocationName -Parent $modulePath = Join-Path $scriptDir 'MyModule.psm1' Import-Module $modulePath
Pierwsza linijka pozwala pobiera ścieżkę do skryptu i wycina z niej tylko katalog.
Druga linijka łaczy nazwę tego katalogu z nazwą modułu
Trzecia linijka ładuje ten moduł.
Komentarze:
[…] Jeśli piszesz już własne funkcje i zbierasz je w pliku modułu, albo może chcesz aby Twój skrypt skorzystał z zasobów umieszczonych w tym samym katalogu (np. plików CVS, XML itp.) to przyda się wiedzieć, jak odnaleźć ścieżkę do katalogu, w którym znajduje się Twój skrypt. Wcale nie jest to trudne – wystarczy skorzystać z $MyInvocation. Szczegóły: http://www.mobilo24.eu/powershell-ladowanie-modulu-z-biezacego-katalogu/ […]