【发布时间】: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 专家,他们可以为此提供更好的解决方案。