执行Select-AzureRmSubscription可以从我的一台(客户端)计算机上运行,​​但不能在另一台计算机上运行

g.p*_*dou 3 powershell azure azure-powershell

上下文

我有一个Microsoft帐户,我有一个和Azure订阅它.我有访问权限(作为用户:所有者添加)到其他Microsoft帐户的其他订阅.

一切正常,当我使用我的唯一凭证登录到Azure门户时,我可以看到右上方菜单中列出的目录(租户?),所以我可以切换.切换到目录后,我可以看到该目录的订阅.

我想在PowerShell中使用此凭据.到目前为止,我成功地使用了Select-AzureRmSubscription,有趣的是我经历过,我可以省略-TenanttId参数,即使订阅是在其他租户下作为我的默认目录.(我想Select-AzureRmSubscription会迭代所有租户的所有订阅,以找到我在-SubscrptionId参数中提供的guid.(或者这只是一个"bug"?).无论如何,现在我已经切换到另一台客户端计算机,并且新近安装了AzureRM PowerShell模块,同样的Select-AzureRmSubscription在那里不起作用.所以我认为这个"bug"是"修复"的,现在我也必须使用-TenantId参数.但是我仍然有错误.

注意:所有工作都来自我的旧开发人员机器:我可以通过使用Select-AzureRmSubscription(甚至不使用-TenantId参数)在不同租户的订阅之间切换

我尝试过的:

$subscriptionId = "42940206-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 
$tenantId = "ce8a477c-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $subscriptionId -TenantId $tenanId 
Run Code Online (Sandbox Code Playgroud)

我有以下错误消息:

Set-AzureRmContext:无法验证参数'SubscriptionId'的参数.参数"42940206-xxxx-xxxx-xxxx-xxxxxxxxxxxx"不属于ValidateSet属性指定的"0692a8b8-xxxx-xxxx-xxxx-xxxxxxxxxxxx"集.提供集合中的参数,然后再次尝试该命令.

什么是这个0692a8b8-xxxx-xxxx-xxxx-xxxxxxxxxxxx"由ValidateSet属性指定.它既不是我的订阅ID,也不是我的tenantIds ......

两台客户机之间的差异

  • 工作:Poweshell 5,大约半年历史的AzureRM模块,由PowerShellGet的安装模块安装

  • 不工作:Poweshell 4,最新的AzureRM模块,由PowerShellGet的安装模块安装

下一步的重要步骤是在新机器上安装PowerShell 5,但它是一台生产机器,很多都是稳定的,并且日复一日地运行PowerShell脚本,所以我不想冒破坏生产过程的风险......

小智 5

我遇到了类似的问题.如果订阅位于不同的租户中,我只会遇到问题.

对我来说,解决方法是获取订阅对象,然后选择它.因此,使用上面的示例,您已经$subscriptionId设置了所需的订阅ID值,您可以:

Get-AzureRmSubscription -SubscriptionId $subscriptionId  | Select-AzureRmSubscription
Run Code Online (Sandbox Code Playgroud)