从webjob运行Azure PowerShell命令

时间:2015-12-31 20:20:46

标签: powershell azure azure-webjobs

更新:我根据BenV的建议在下面使用了Azure自动化,它运行良好!可以找到更多信息here

我有一个PowerShell脚本,需要运行一些Azure命令,如ifNew-AzureStorageContextGet-AzureStorageContainer等。我想将脚本作为webjob运行。

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

我搜索了StackOverflow,但无法找到从webjob运行Azure命令时生成的这些错误的帖子。提到使用Set-AzureStorageBlobContent的一些相关帖子与下面给出的建议类似。

较旧的MSDN博文建议在PS脚本中添加“Import-Module Azure.ps1”,并在webjob zip文件中包含Azure.ps1。 (它来自我本地的C:\ Program Files(x86)\ Microsoft SDKs \ Azure \ PowerShell \ ServiceManagement \ Azure中的Azure.psd1)。另外,我尝试使用Azure.psd1导入模块,然后Azure.ps1认为错误可能与文件扩展名有关,但事实并非如此。

我的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命令​​,我仍然得到与下面的一个示例错误相同的错误。

Import-Module

+ FullyQualifiedErrorId:CommandNotFoundException

2 个答案:

答案 0 :(得分:3)

WebJobs运行的沙箱目前不支持Azure PowerShell。有多种因素:

  1. CmdLets未安装在工作人员
  2. 即使已安装,也存在阻止其正常运行的问题
  3. 即使它们运行,您也需要在运行命令之前进行身份验证。最后一部分可以使用服务主体解决。
  4. 因素#2是最大的阻挡者。我们想要达到可行的程度,但现在它很棘手。

    一种可能的解决方法是直接执行ARM请求,但这需要更多工作(并且您仍需要使用Service Principal进行身份验证)。您也可以编写C#代码来进行调用。

答案 1 :(得分:0)

另一种可能的选择可能是使用节点脚本和azure cli。唉,我也尝试用.sh脚本来解决这个问题,但是尝试设置azure cli env会失败(参见https://github.com/projectkudu/kudu/issues/1935)。最后,如果你需要的存储功能可能会尝试使用SAS令牌和http请求在你自己的ps函数中做基本的东西......