是否可以从web应用程序执行Powershell Azure CMDlets



现在,当我在本地运行时,我可以从我的ASP MVC web应用程序执行Powershell Azure cmdlet和脚本,但当我部署到Azure网站时,Powershell Azure cmdlets不起作用。

错误消息:

术语"Get-AzureSubscription"未被识别为cmdlet、函数、脚本文件或可操作程序。检查拼写的名称,或者如果包含路径,请验证该路径是否更正并重试。

我想它不起作用,因为"azure cmdlet"没有安装在web服务器上

我能做什么?有什么建议吗?


嗨,我现在正在测试Azure虚拟机中IIS8中托管的应用程序,但当应用程序部署到服务器时,我无法使用Azure Cmdlet,Azure cmdlet已经安装在虚拟机上。

当我使用Visual studio在VM中调试应用程序时,我可以使用cmdlet,但当部署应用程序时无法识别cmdlet。

为了使用Azure cmdlet,我还需要设置其他内容???


这是一个函数的例子,该函数用结果填充一个dropdownlist,在localhost中工作正常,在IIS中工作正常。

public IEnumerable<SelectListItem> getImageFamily()
{
var shell = PowerShell.Create();
shell.Commands.AddScript("C:\inetpub\wwwroot\appNameScripts\test.ps1");
Collection<PSObject> results = shell.Invoke();
List<SelectListItem> items = new List<SelectListItem>();
foreach (var psObject in results)
{
string image = psObject.BaseObject.ToString();
items.Add(new SelectListItem { Text = image, Value = image });
}
return items;
}

这就是的简单脚本

(Get-AzureVMImage).ImageFamily | sort -Unique

我也试过

Import-Module -Name "${env:ProgramFiles(x86)}Microsoft SDKsAzurePowerShellServiceManagementAzure"
(Get-AzureVMImage).ImageFamily | sort -Unique

还试过(我剪了一些代码…)

public IEnumerable<SelectListItem> getImageFamily()
{
...
shell.Commands.AddScript("(Get-AzureVMImage).ImageFamily | sort -Unique");
Collection<PSObject> results = shell.Invoke();
...
}

要回答特定问题,不,在Azure Web应用程序(以前的Azure网站)中不可能这样做。

不过你还有一些选择。

  1. PowerShell cmdlet在很大程度上包装服务管理API和资源管理器API。这些是REST API,所以根据您尝试做什么,您可能只使用这些,并使用HTTP/s调用直接从应用程序调用API我强烈建议采取这种方法

  2. 如果你真的必须从应用程序中获得对Azure PowerShell的依赖,那么你可以使用Azure云服务Web角色,并使用启动任务安装Azure PowerShell cmdlet。

  3. 你可以采用IaaS方法,在Azure虚拟机中托管你自己的IIS服务器(或服务器场),在那里你可以完全控制机器的配置。当然,如果您采用这种方法,您还将承担维护VM的全部责任。

就我个人而言,我会尽我所能避免选择2和3。这不是一个好的设计。在某种程度上,我甚至很后悔提到它们,因为你可能会在试图让它们发挥作用时遇到其他问题。但是,我想在我的回答中做到彻底。

最新更新