从Webjob运行Azure PowerShell命令

4

更新: 我按照BenV的建议使用Azure Automation成功了! 更多信息可以在这里找到。


我有一个PowerShell脚本需要运行一些Azure命令,如New-AzureStorageContextGet-AzureStorageContainerSet-AzureStorageBlobContent等。我想将脚本作为WebJob运行。

当我将此脚本作为WebJob运行时,在Azure命令中遇到以下错误。其他PS命令从WebJob成功运行。

我在StackOverflow上搜索,并没有找到任何关于WebJob中运行Azure命令产生这些错误的帖子。一些相关的帖子提到使用Import-Module,这与下面给出的建议类似。

一个较旧的MSDN博客文章建议在PS脚本中添加“Import-Module Azure.ps1”,并在webjob zip文件中包含Azure.ps1。(实际上是Azure.psd1,来自我的本地C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ServiceManagement\Azure)。另外,我尝试使用Azure.psd1和Azure.ps1进行Import-Module,以便考虑错误是否与文件扩展名相关,但结果并非如此。

我的WebJob .zip文件只有我的.CMD文件、GetLinks.ps1和Azure.ps1。

我的.CMD文件使用以下命令启动我的PS脚本: PowerShell.exe -ExecutionPolicy RemoteSigned -File GetLinks.ps1

在此.ps1文件的顶部,我有: "Import-Module .\Azure.ps1"。这运行成功,因为我在WebJob运行日志中看到了“INFO”语句。

接下来,我的PS脚本尝试运行Azure PS命令,但我仍然会遇到与以下示例错误相同的错误信息。


New-AzureStorageContext : The term 'New-AzureStorageContext' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At D:\local\Temp\jobs\triggered\getlinks2\b2025qk5.ddj\GetLinks.ps1:75 char:19
+ $storageContext = New-AzureStorageContext -StorageAccountName $storageAccountNam ...
+  ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (New-AzureStorageContext:String) [], CommandNotFoundException

FullyQualifiedErrorId : CommandNotFoundException

的意思是:命令未找到。

使用WebJobs的要求是什么?您是否有任何理由无法使用Azure Automation? - BenV
谢谢。我会研究Azure自动化。另一个选择是像David在下面建议的那样编写C#应用程序。 - RandomTask
2个回答

4
Azure PowerShell目前不支持从WebJobs运行的沙箱中运行。这是由于多种因素造成的:
  1. CmdLets未安装在工作进程上
  2. 即使已安装,也存在阻止其正确运行的问题
  3. 即使它们运行,您还需要在运行命令之前进行身份验证。使用服务主体可以解决此最后一部分。
第二个因素是最大的障碍。我们希望能够实现这一点,但目前情况比较棘手。
一种潜在的解决方法是直接进行ARM请求,尽管这需要更多的工作(您仍然需要使用服务主体进行身份验证)。您还可以编写C#代码来进行调用。

这还是现状吗?WebJobs似乎可以运行ps和bash脚本,但我仍然看到与上述类似的错误。 - AShah

0

另一个可能的选择是使用节点脚本和Azure CLI。不幸的是,我也尝试用.sh脚本解决这个问题,但是在设置Azure CLI环境时会失败(请参见https://github.com/projectkudu/kudu/issues/1935)。最后,如果您只需要存储功能,可以尝试使用SAS令牌和HTTP请求来在自己的ps函数中执行基本操作...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接