2017-12-30 35 views
0

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?

+0

'Get-Module -List Available *' - was gibt es zurück? –

+0

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

+0

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

Antwort

0

Es scheint, dass Sie privaten Agenten verwenden. So können Sie in $env:PSModulePath kopieren. Dann können Sie das Powershell-Modul direkt in VSTS Build verwenden.

Zunächst können Sie die Pfade drucken, indem Sie echo $env:PSModulePath auf Ihrem lokalen Computer (privater Agent) ausführen. Es wird eine Liste von Pfaden wie folgt:

C:\Users\username\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C: 
\windows\system32\WindowsPowerShell\v1.0\Modules\;c:\Program Files\Microsoft Security Client\MpPro 
vider\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\;C:\Program Files\ 
AppFabric 1.1 for Windows Server\PowershellModules;C:\Program Files\Microsoft System Center 2012 R 
2\Virtual Machine Manager\bin\psModules\;C:\Program Files\Microsoft System Center 2012 R2\Service 
Manager\PowerShell\;C:\Program Files\WindowsPowerShell\Modules\;C:\Program Files (x86)\Microsoft S 
DKs\Azure\PowerShell\ResourceManager\AzureResourceManager\;C:\Program Files (x86)\Microsoft SDKs\A 
zure\PowerShell\ServiceManagement\;C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\Storage\ 

Dann in einen Pfad in $env:PSModulePath kopieren.

Jetzt können Sie erneut erstellen, das Powershell-Modul sollte von VSTS Build erkannt werden.

Verwandte Themen