我想在Azure DevOps发布管道中使用Azure PowerShell Module(又称Az模块)。但是,现有的PowerShell选项似乎无效。我已经尝试了各种方法,但是安装新的Az模块只会带来很多错误,包括Az and AzureRM modules cannot be imported in the same session or used in the same script or runbook.
常规PowerShell任务没有内置的任何Azure模块。AzurePowerShell任务使用Azure RM PowerShell module,该版本已淘汰(即仍受支持,但不会添加任何新功能)。
上面的错误很可能是由于Azure PowerShell任务启动时,它在运行我的脚本之前执行以下操作:
2019-01-13T13:34:14.5416432Z ==============================================================================
2019-01-13T13:34:14.5416555Z Task : Azure PowerShell
2019-01-13T13:34:14.5416623Z Description : Run a PowerShell script within an Azure environment
2019-01-13T13:34:14.5416705Z Version : 3.1.18
2019-01-13T13:34:14.5416762Z Author : Microsoft Corporation
2019-01-13T13:34:14.5416831Z Help : [More Information](https://go.microsoft.com/fwlink/?LinkID=613749)
2019-01-13T13:34:14.5416969Z ==============================================================================
2019-01-13T13:34:20.3546127Z ##[command]Import-Module -Name C:\Modules\AzureRm_6.7.0\AzureRM\6.7.0\AzureRM.psd1 -Global
2019-01-13T13:34:58.4365259Z ##[command]Clear-AzureRmContext -Scope Process
2019-01-13T13:34:59.2732327Z ##[command]Disable-AzureRmContextAutosave -ErrorAction SilentlyContinue
2019-01-13T13:35:00.1691359Z ##[command]Add-AzureRMAccount -ServicePrincipal -Tenant *** -Credential System.Management.Automation.PSCredential -Environment AzureCloud @processScope
2019-01-13T13:35:01.5702545Z ##[command] Select-AzureRMSubscription -SubscriptionId d5eaaba3-2968-456a-98a4-e53e961fc896 -TenantId ***
2019-01-13T13:35:02.1592660Z ##[command]& 'D:\a\r1\a\ws-build\tools\install-dependencies.ps1'
自然,在一个新项目中,我不想使用不再高级的模块来创建PowerShell脚本。
并向前思考,即使我确实设法克服了这个问题,我也必须以某种方式对Azure进行身份验证,而现有的Azure DevOps UI会为我进行身份验证,而我还看不到如何使用Az来做到这一点。模块。
Google搜索似乎没有帮助,因为大多数信息仍然与不推荐使用的AzureRM模块相关。所以...总而言之。
如何在Azure DevOps发布管道中使用Azure(Az)Powershell模块?
答案 0 :(得分:1)
任务与特定模块有关。如果要使用任务,除了等待他们更新它之外,您无能为力。
如果愿意,可以派生task repository并自己更新。或者,您可以编写自己的Azure身份验证逻辑。
您可以使用反向别名(Az-> AzureRM)来编写脚本,而不是使用Az模块(AzureRM-> Az)提供的别名,因此您可以使用受支持的cmdlet名称来编写脚本,从而使自己适应未来。
答案 1 :(得分:0)
作为一种解决方法,我一直在使用Hosted VS2017代理程序池,因为这些已使Az模块准备好使用
答案 2 :(得分:0)
我采取了黑客途径,但最终创建了一个虚拟AzureRM模块以安装在自托管代理上,然后修改了代理上Azure PowerShell任务的脚本以加载AzureRM别名。最终结果是我在代理上安装了Az,并且他们可以在Azure PowerShell任务的版本3或4上运行AzureRM样式cmdlet名称和/或Az样式cmdlet名称。这使我可以在构建代理上切换到Az,并允许团队逐步迁移其脚本以使用Az cmdlet名称。
我的解决方案是在Github上:https://github.com/brendonthiede/dummy-AzureRM
一个警告是,每次更新任务时,这可能都需要“重新修改”代理上的Azure PowerShell脚本。
答案 3 :(得分:0)
尝试使用Azure Powershell Task版本4。*(预览)。此功能仍处于预览状态。与自托管代理一起使用。它将很快发布给Microsoft托管代理。
答案 4 :(得分:0)
并非Azure Powershell Task的每个版本都具有Az和AzureRm模块