【问题标题】:Is possible to execute Powershell Azure CMDlets from web application?是否可以从 Web 应用程序执行 Powershell Azure CMDlet?
【发布时间】:2015-06-30 12:54:22
【问题描述】:

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

错误信息:

“Get-AzureSubscription”一词未被识别为 cmdlet、函数、脚本文件或可运行的程序。检查拼写 的名称,或者如果包含路径,请验证该路径是 正确并重试。

我猜它不起作用,因为 Web 服务器上没有安装“azure cmdlet”

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


再次嗨,我现在在 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();
        ...
    }

【问题讨论】:

标签: asp.net powershell azure azure-web-app-service


【解决方案1】:

要回答具体问题,不能在 Azure Web 应用程序(以前的 Azure 网站)中执行此操作。

不过,您有一些选择。

  1. 在大多数情况下,PowerShell cmdlet 封装了 Service Management API 和 Resource Manager API。这些是 REST API,因此取决于您要执行的操作,您可能只使用这些 API,并使用 HTTP/S 调用直接从您的应用程序调用 API。 我强烈建议采用这种方法。

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

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

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

【讨论】:

  • 感谢您的回答,我的应用需要很多特定的 Powershell Azure cmdlet,所以我可以采用的最佳路径是第三个。
  • 您好,我现在在 Azure 虚拟机中测试托管在 IIS8 中的应用程序,但是再次将应用程序部署到服务器时,我无法使用 Azure Cmdlet,Azure cmdlet 已经安装在虚拟机。当我使用 Visual Studio 在 VM 中调试应用程序时,我可以使用 cmdlet,但是在部署应用程序时,无法识别 cmdlet。为了使用 Azure cmdlet,我还需要设置其他一些东西???
  • IIS 的工作进程不会拥有与您的开发环境相同的环境变量(即:%path%)。因此,您可能需要使用完整路径来引用它们。虽然没有看到您如何调用 cmdlet,但很难确定。
  • 嗨,谢谢你的回答我用一个例子更新了这个问题,我也不太明白你提到的环境变量:S
  • 既然您选择了选项 3,我建议您将 RDP 插入虚拟机并确保您的 PowerShell 正常工作。然后,从在 VM 上本地运行的 IIS 尝试它。坦率地说,鉴于您所说的您正在做的事情,我认为不需要 PowerShell。一切都可以通过简单的 REST 调用(选项 1)来完成,这是我在这里推荐的,这样你就可以避免这一切。从 IIS/W3WP 调用另一个进程并不是好的设计。可能导致您出现问题的其他原因是您用于运行 PS 的进程可能具有有限的权限。只是一个想法 - 并不是说​​这是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 2019-11-22
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多