现在,我可以在本地运行时从我的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();
...
}
答案 0 :(得分:1)
要回答具体问题,请不要在Azure Web Apps(以前称为Azure网站)中执行此操作。
你有一些选择。
PowerShell cmdlet在大多数情况下会封装Service Management API和Resource Manager API。这些是REST API,因此根据您的尝试,您可能只需使用这些API,并使用HTTP / S调用直接从您的应用程序调用API。 我强烈建议采用这种方法。
如果您确实必须从应用程序中依赖Azure PowerShell,则可以使用Azure云服务Web角色,并使用Startup Task安装Azure PowerShell cmdlet。
< / LI>您可以采用IaaS方法并在Azure虚拟机中托管您自己的IIS服务器(或服务器场),您可以在其中完全控制计算机的配置。当然,如果采用这种方法,您还要承担维护VM的全部责任。
就个人而言,我会尽我所能避免选项2和3.这只是不好的设计。在某种程度上,我后悔甚至提到它们,因为你可能会遇到其他问题试图让它们发挥作用。但是,我想彻底回答我的问题。