【问题标题】:How to use a custom Powershell module in a VSTS build task如何在 VSTS 构建任务中使用自定义 Powershell 模块
【发布时间】:2017-12-30 21:15:28
【问题描述】:

我正在尝试设置使用自定义 Powershell 脚本的 VSTS 构建定义。我创建了一个带有两个函数的 BuildPackage.psm1 模块文件,我可以在两个不同的构建定义中使用它们。我正在尝试让其中一个工作,并设置了一个导入模块的任务,然后是一个运行其中一个功能的任务。

我已将我的模块复制到此位置:

.\src\Tools\PSModules\BuildFontPackage\BuildFontPackage.psm1

对于第一个任务,为了导入模块,我使用以下内联脚本添加了一个 PowerShell 脚本任务:

$env:PSModulePath = "$env:BUILD_SOURCESDIRECTORY\src\Tools\PSModules;$env:PSModulePath"
Import-Module -Name BuildFontPackage.psm1

Import-Module 命令运行并且它似乎可以工作:如果我将 -Verbose 参数添加到 Import-Module,我会得到以下信息:

详细:从路径“C:\BA\47\s\src\Tools\PSModules\BuildFontPackage\BuildFontPackage.psm1”加载模块。
详细:导出函数“新包”。
详细:导出函数“New-AllPackages”。
详细:导入函数“New-AllPackages”。
VERBOSE:导入函数“New-Package”。

但是,在以下任务中,当我尝试在模块中使用 New-Package 功能时,我收到此错误:

New-Package:术语“New-Package”未被识别为 cmdlet、函数、脚本文件或 进程以退出代码 0 完成,并有 1 个错误写入错误流。

好像我的模块没有加载。

我怎样才能做到这一点?

【问题讨论】:

  • Get-Module -ListAvailable * -- 返回的是什么?
  • 每个任务都以干净的上下文开始,并且不保留以前加载的模块。如果您有单独的脚本任务或单独的内联脚本任务,则需要在每个任务中加载模块。
  • 在这种情况下,在我用来导入它的同一个内联脚本/任务中调用模块很简单。如果涉及到更多的复杂性,那么所有的复杂性都可以合并到使用任务定义中的短内联脚本加载的模块中。

标签: powershell module azure-pipelines


【解决方案1】:

您似乎正在使用私人代理。所以你可以将BuildFontPackage\BuildFontPackage.psm1复制到$env:PSModulePath。然后就可以直接在VSTS build中使用powershell模块了。

首先,您可以通过在本地机器(私人代理)中执行echo $env:PSModulePath 来打印路径。它将显示如下路径列表:

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\

然后将BuildFontPackage\BuildFontPackage.psm1复制到$env:PSModulePath中的任意路径中。

现在可以再次编译了,powershell模块应该可以被VSTS编译识别了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2017-06-04
    • 2018-09-13
    • 2017-05-25
    • 1970-01-01
    • 2019-03-04
    • 2023-03-26
    • 2019-07-29
    相关资源
    最近更新 更多