是否可以从Web应用程序执行Powershell Azure CMDlet?

时间:2015-04-22 17:24:31

标签: asp.net powershell azure azure-web-sites

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

错误讯息:

  

术语' Get-AzureSubscription'不被识别为a的名称   cmdlet,函数,脚本文件或可操作程序。检查拼写   如果包含名称,或者包含路径,请验证路径是否正确   纠正,然后再试一次。

我猜它不起作用,因为" azure cmdlet"未安装在Web服务器上

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

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

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

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

这是一个函数的示例,该函数使用结果填充下拉列表,在localhost中它在IIS中工作正常。

public IEnumerable<SelectListItem> getImageFamily()
    {
        var shell = PowerShell.Create();
        shell.Commands.AddScript("C:\\inetpub\\wwwroot\\appName\Scripts\\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 SDKs\Azure\PowerShell\ServiceManagement\Azure"

(Get-AzureVMImage).ImageFamily | sort -Unique

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

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

1 个答案:

答案 0 :(得分:1)

要回答具体问题,请不要在Azure Web Apps(以前称为Azure网站)中执行此操作。

你有一些选择。

  1. PowerShell cmdlet在大多数情况下会封装Service Management APIResource Manager API。这些是REST API,因此根据您的尝试,您可能只需使用这些API,并使用HTTP / S调用直接从您的应用程序调用API。 我强烈建议采用这种方法

  2. 如果您确实必须从应用程序中依赖Azure PowerShell,则可以使用Azure云服务Web角色,并使用Startup Task安装Azure PowerShell cmdlet。

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

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