Set-AzContext在Azure Cloud Shell中有效,但在Azure PowerShell中无效

时间:2019-06-20 17:34:17

标签: azure powershell azure-powershell azure-cloud-shell

当我执行以下命令

Clear-AzureProfile
Connect-AzAccount -TenantID xxxxxxxxxxxxxxxxxxx
Set-AzContext -SubscriptionId xxxxxxxxxxxxxxxxxxx
Azure PowerShell中的

我收到此错误。

Set-AzContext : Please provide a valid tenant or a valid subscription.
At line:6 char:1
+ Set-AzContext -SubscriptionId xxxxxxxxxxxxxxxxxxx

如果我在Azure Cloud Shell中运行相同的命令,它将起作用

Name        Account         SubscriptionName    Environment    TenantId         
xxxx        xxxxxxx         xxxx                 xxxx             xxxx

我从免费试用版切换为即用即付订阅,并且在两种环境下都使用凭据进行即用即付,但这是行不通的。谁能帮忙

3 个答案:

答案 0 :(得分:1)

关闭您的Powershell并打开一个新的Powershell,或者使用Clear-AzContext而不是Clear-AzureProfile。然后使用Connect-AzAccount -Tenant xxxxx -Subscription xxxxx,它应该可以工作。

答案 1 :(得分:0)

如果您在同一个租户中循环订阅,而又不想多次登录Connect-AzAccount,以下方法对我来说可以在订阅之间进行切换:

Remove-AzContext -InputObject (Get-AzContext) -Force | Out-Null;
$sub = Set-AzContext -Subscription $_.SubscriptionName;

在添加Remove-AzContext语句之前,我发现Set-AzContext实际上由于某种原因并未将上下文切换到另一个预订。

答案 2 :(得分:0)

我也曾经遇到过这个问题,而且我的解决方案与上面提供的解决方案不同。 显然,在我们的Azure Cloud Shell中,我们有几个可用的上下文,因此,我们不必设置上下文(使用Set-AzContext),而使用Select-AzContext切换到一个或其他上下文)

我可以使用

列出上下文
Get-AzContext -ListAvailable

然后使用

选择一个
Select-AzContext -Name ...

例如,在脚本中,我使用此单行命令切换到ID为$ SubscriptionID的订阅:

Select-AzContext -name ((Get-AzContext -ListAvailable).Name -match $SubscriptionId)[0]

不优雅,但是高效

我不知道为什么我们会遇到这种情况。可能是因为我们正在使用其他租户的受邀帐户进行管理。

希望这可以帮助与我们处境相同的人。