VSTS Azure powershell:未指定默认订阅

Posted

技术标签:

【中文标题】VSTS Azure powershell:未指定默认订阅【英文标题】:VSTS Azure powershell : No default subscription has been designated 【发布时间】:2017-02-07 21:16:50 【问题描述】:

我正在尝试运行一些 azure powershell 命令,作为我使用 Azure 资源管理器构建的 Visual Studio Team Services 的一部分。

它给了我以下错误:

没有指定默认订阅。使用 Select-AzureSubscription -Default 设置默认订阅。

我正在尝试运行的命令:

$website = Get-AzureWebsite | where $_.Name -eq 'my-website'
Write-Output ("##vso[task.setvariable variable=DeployUrl;]$website.HostNames")

当我尝试在本地运行它时,我不得不调用

Add-AzureAccount
Select-AzureRmSubscription -SubscriptionName "Visual Studio Premium with MSDN"

让它工作,但在 VSTS 构建中是不可能的。

更新:

我已将其配置为使用 azure 经典模式而不是资源管理器,它可以正常工作。我不认为这是一个可行的生产解决方案,因为 azure 经典模式已过时。

【问题讨论】:

Get-AzureWebSite 是 cmdlet 的“经典”版本,因此需要经典身份验证。 Get-AzureRmWebApp,是资源管理器 cmdlet。 谢谢!您能否添加一个答案以便我接受? 你可以参考Eddie的回答。 是的,我认为 Eddie 也涵盖了它 - 如果有什么可以澄清的 lmk... 【参考方案1】:

感谢您的提问。

如果您使用的是服务管理器模式(经典模式),正确的 cmdlet 是:Add-AzureAccount Get-AzureSubscription -SubscriptionName “名称” |选择-AzureSubscription

如果您使用的是资源管理器,正确的 cmdlet 是:Login-AzureRmAccount Get-AzureRmSubscription –SubscriptionName "名称" |选择-AzureRmSubscription 或者只使用 -SubscriptionId 而不是 -SubscriptionName。

更多关于ASM和ARM的信息,请参考以下链接:https://azure.microsoft.com/en-us/documentation/articles/resource-manager-deployment-model/

如果您仍有疑问,欢迎在此处回复。谢谢。

【讨论】:

是否可以在同一个版本定义中同时使用两者?例如,如果我想运行一些 ARM 模板,则调用 Publish-AzureWebsiteProject 之类的东西是一个 ASM cmdlet。在调用 ASM cmdlet 之前调用 Select-AzureSubscription 会导致 The subscription id x... doesn't exist【参考方案2】:

由于您使用的是 Azure 资源管理器,请检查以下内容:

    确保正确添加“Azure 资源管理器”服务端点。 如 bmoore 所述,使用“Get-AzureRmWebApp”命令代替“Get-AzureWebsite”命令。

我已经在我身边测试过,它可以正常工作。

我的 PowerShell 脚本:

$website = Get-AzureRmWebApp | where $_.Name -eq 'eddieapp0930'
Write-Host $website.HostNames

从“Azure PowerShell 脚本”任务运行:

【讨论】:

以上是关于VSTS Azure powershell:未指定默认订阅的主要内容,如果未能解决你的问题,请参考以下文章

VSTS Web Deploy参数产生错误

Azure Active Directory:使用 PowerShell 将服务主体添加到目录读取者角色

Jenkins中使用Azure Powershell连接Service Fabric报错not recognized的原因与解决办法

VSTS:将构建/发布变量传递到 Powershell 脚本任务

使用azure powershell 在ARM下用指定vhd镜像来创建虚拟机

如何从PowerShell以编程方式列出VSTS代理池?