如何使用 Azure Powershell 执行此操作?

Posted

技术标签:

【中文标题】如何使用 Azure Powershell 执行此操作?【英文标题】:How do I do this with Azure Powershell? 【发布时间】:2015-03-08 07:17:05 【问题描述】:

我希望通过 C# 中的 Azure Powershell 管理 Azure 的某些设置。我需要以编程方式管理许多客户的订阅。

我想确保每当我打开 PowerShell 会话来处理特定客户的订阅时,该会话的任何内容都不会留在注册表、证书存储等中。

我有可用的管理证书作为加密字节数组。如果需要,我可以将它们保存在硬盘上。

我也很高兴不通过 Powershell 会话而是直接通过引用 .DLL 中的对象来调用 Powershell cmdlet

我希望避免在某些情况下直接使用 Management API,这就是我想通过 Powershell 这样做的原因

这可能吗?如果是这样,我该如何避免使用证书存储?理想情况下,我希望有一种方法可以从 C# 调用 cmdlet,而无需通过 Powershell 会话

【问题讨论】:

您是否有理由希望通过 PowerShell 而不是使用 .Net Azure Management API 包装器来执行此操作? 有些命令(目前是那些处理诊断扩展的命令)似乎很难解构为可操作的 API 调用。我宁愿不为此绑定到管理 API,并尽可能处理 cmdlet 的“支持”接口 有道理!您是否考虑过使用 $cert=New-Object System.Security.Cryptography.X509Certificates.X509Certificate2(byte array) 之类的东西创建 X509Certificate2 对象的实例?但是,您还必须拥有证书私钥,否则身份验证将失败。或者换句话说,你应该让你的用户给你一个带密码的 PFX 证书而不是一个 CER 文件。 我确实有私钥,所以这不是问题。但是如何指定我新创建的对象必须在 Azure cmdlet 中使用? 我不是 PowerShell 专家,但据我了解,Azure Cmdlet 是一个 PowerShell 模块,当您通过计算机上的 Azure PowerShell Cmdlets 快捷方式访问它时,它会自动加载。您需要做类似的事情,即以编程方式启动 PowerShell 并加载此模块。让我 ping 一些 PowerShell 专家,他们可以为此提供更好的解决方案。 【参考方案1】:

您应该开始使用 Azure Active Directory credentials 而不是 X.509 证书。 Azure PowerShell 的 Azure 服务管理 (ASM) 和 Azure 资源管理器 (ARM) 模式都支持 AAD,而证书身份验证只能用于 ASM。使用 AAD 凭据意味着您永远不需要使用 X.509 证书的证书,并且受到它们施加的管理困难的影响。您需要作为共同管理员添加到您的客户订阅中以获得 ASM 支持(和生产门户),并为 ARM 支持(和预览门户)提供适当的角色。但是,您的客户可以使用 RBAC 限制您的 ARM 和预览门户访问。

【讨论】:

谢谢尼尔。因此,如果我理解正确,我会要求我的客户将特定 LiveID 作为“CoAdmin”添加到他们的管理员部分,然后我使用 Powershell 和我的特定 LiveID 通过 AAD 进行身份验证? 他们需要为您提供一个 AAD 帐户。您可以使用真实帐户在任一门户中登录和管理内容 - 但您无法使用 PowerShell。我相信有某种豁免允许订阅所有者通过真实帐户使用 PowerShell。如果您可以在预览门户中完成所有操作,则只需将您添加到特定资源的相关角色即可。例如,如果您被添加到虚拟机参与者角色的订阅中,您将只能查看执行该角色所需的资源并对其采取行动。 因此,经过大量研究并查看 sdk 源代码,我感兴趣的 powershell cmdlet 似乎不支持 AAD 凭据,仅支持证书。同时,这些命令行开关有严重的错误..这些是服务诊断扩展 cmdlet..这真是令人沮丧..【参考方案2】:

PowerShell 有一个名为 clear-azureprofile 的 cmdlet ...它会清除所有连接 ...如果您真的想确保最好也清除 IE cookie 并在两个操作之后启动新的 PoSh 会话(所以最好这样做它在每个会话结束时)...我同意 Neil 顺便说一句:远离证书...瞄准 AAD

但是......你为什么不看看管理库(MAML?它是你不需要调用 REST 的基础,你可以避免使用 PowerShell(也使用 MAML)。它可以下载为nuget包

在这里找到它http://www.nuget.org/packages/Microsoft.WindowsAzure.Management.Libraries 并在此处http://azure.microsoft.com/en-us/updates/management-libraries-for-net-release-announcement/ 和此处http://www.bradygaster.com/post/getting-started-with-the-windows-azure-management-libraries 找到有关它的信息 希望这可以帮助!

【讨论】:

因此,我们在 AzureWatch 和新产品中都使用管理库。但是,让他们初始化/更新或找出新诊断的设置是一场噩梦:(做 clear-azureprofile 也不是很好的方法,因为 powershell 的执行可以同时在多个线程(或进程)上针对不同的客户。仅应清除一个会话时,无法清除所有 azure 会话的上下文 igor,通常情况下,如果你正在使用多线程的 powershell,这对于 powershell 来说总是一个干净的会话,但想想看,也许这是一个问题,在那个列表上问 ;-)【参考方案3】:

唯一的自动化方式是使用 AAD 帐户进行订阅。请注意,令牌将在 12 小时后过期。请参阅 June 的精彩博文。 http://www.sapien.com/blog/2014/10/23/saving-passwords-for-add-azureaccount/

【讨论】:

以上是关于如何使用 Azure Powershell 执行此操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PowerShell解锁Azure AD用户帐户?

Azure devops powershell 任务问题

如何在 Azure PowerShell 的错误消息中隐藏敏感值?

如何安装和配置 Azure PowerShell

如何使用 Powershell 中的快照创建 Azure 托管磁盘

Powershell远程在Azure A7虚拟机执行Java JVM失败