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

Posted

技术标签:

【中文标题】执行 Select-AzureRmSubscription 可以从我的一台(客户端)机器上运行,但不能在另一台机器上运行【英文标题】:Executing Select-AzureRmSubscription works from one of my (client) machines but not in an other 【发布时间】:2016-10-12 18:43:54 【问题描述】:

上下文

我有一个 Microsoft 帐户,我有一个 Azure 订阅。我拥有其他 Microsoft 帐户的其他订阅的访问权限(添加为用户:所有者)。

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

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

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

我的尝试:

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

Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $subscriptionId -TenantId $tenanId 

我收到以下错误消息:

Set-AzureRmContext:无法验证参数“SubscriptionId”上的参数。参数“42940206-xxxx-xxxx-xxxx-xxxxxxxxxxxx”不 属于 ValidateSet 属性指定的集合“0692a8b8-xxxx-xxxx-xxxx-xxxxxxxxxxxx”。提供集合中的参数,然后重试该命令。

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

两台客户端机器之间的差异

工作:Poweshell 5,大约半年的 AzureRM 模块,由 PowerShellGet 的 Install-Module 安装

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

下一步的简单步骤是在新机器上安装 PowerShell 5,但它是一台稳定的生产机器,每天都在运行 PowerShell 脚本,所以我不想冒险破坏生产过程......

【问题讨论】:

【参考方案1】:

我遇到了类似的问题。仅当订阅位于不同租户中时,我才会遇到此问题。

对我来说,解决方法是获取订阅对象,然后选择它。因此,使用上面的示例,您可以使用您想要的订阅 ID 值设置 $subscriptionId,您可以这样做:

Get-AzureRmSubscription -SubscriptionId $subscriptionId  | Select-AzureRmSubscription

【讨论】:

在我使用的帐户有自己的天蓝色订阅但也被设置为另一个订阅的管理员的情况下,这对我有用。

以上是关于执行 Select-AzureRmSubscription 可以从我的一台(客户端)机器上运行,但不能在另一台机器上运行的主要内容,如果未能解决你的问题,请参考以下文章

jvm的解释执行与编译执行

Jmeter--多个线程组顺序执行和并行执行

小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行

同步执行与异步执行

js函数执行顺序,怎麼让一个函数执行完再执行下面的程序

java中定时执行任务,为啥方法没有执行完就不执行了?