Ich versuche, VSTS-Builddefinitionen einzurichten, die benutzerdefinierte Powershell-Skripts verwenden. Ich habe eine BuildPackage.psm1-Moduldatei mit zwei Funktionen erstellt, die ich in zwei verschiedenen Builddefinitionen verwenden kann. Ich versuche, eine dieser Funktionen zu erhalten, und habe eine Aufgabe zum Importieren des Moduls eingerichtet, gefolgt von einer Aufgabe zum Ausführen einer der Funktionen.So verwenden Sie ein benutzerdefiniertes Powershell-Modul in einer VSTS-Erstellungsaufgabe
ich mein Modul in diesen Ort kopiert habe:
:$env:PSModulePath = "$env:BUILD_SOURCESDIRECTORY\src\Tools\PSModules;$env:PSModulePath"
Import-Module -Name BuildFontPackage.psm1
.\src\Tools\PSModules\BuildFontPackage\BuildFontPackage.psm1
Für die erste Aufgabe, um das Modul zu importieren, ich habe eine Powershell-Skript-Aufgabe mit dem folgende Inline-Skript hinzugefügt
der Import-Module Befehl ausgeführt wird, und es scheint zu funktionieren: die folgenden, wenn ich den -Verbose Parameter Import-Module hinzufügen, die ich erhalten:
VERBOSE: Loading module from path 'C:\BA\47\s\src\Tools\PSModules\BuildFontPackage\BuildFontPackage.psm1'.
VERBOSE: Exporting function 'New-Package'.
VERBOSE: Exporting function 'New-AllPackages'.
VERBOSE: Importing function 'New-AllPackages'.
VERBOSE: Importing function 'New-Package'.
jedoch in der folgenden Aufgabe, wenn ich versuche, die New-Package-Funktion innerhalb des Moduls zu nutzen, bekomme ich diesen Fehler:
New-Package : The term 'New-Package' is not recognized as the name of a cmdlet, function, script file, or Process completed with exit code 0 and had 1 error(s) written to the error stream.
Es ist, als ob mein Modul nicht geladen ist.
Wie kann ich das schaffen?
'Get-Module -List Available *' - was gibt es zurück? –
Jede Aufgabe beginnt mit einem sauberen Kontext und zuvor geladene Module werden nicht beibehalten. Wenn Sie separate Skriptaufgaben oder separate Inline-Skriptaufgaben haben, müssen Sie Ihre Module in jeder dieser Aufgaben laden. – jessehouwing
In diesem Fall ist es einfach genug, das Modul im selben Inline-Skript/Aufgabe aufzurufen, mit dem ich es importiere. Und wenn mehr Komplexität involviert ist, dann kann die gesamte Komplexität in Module integriert werden, die unter Verwendung eines kurzen Inline-Skripts in der Aufgabendefinition geladen werden. – Peter