运行一个控制台应用程序(在内部调用powershell脚本)一个天蓝色的Web作业

时间:2017-04-08 23:37:28

标签: azure-webjobs

我有一个控制台应用程序,在其他任务中,调用一个powershell脚本。我想按计划从网络工作中运行它。

a)我能够将我的控制台应用程序发布到Web作业中,并且运行它时运气良好。但是,必须选择按需选项并且必须手动触发它。

b)我将项目的输出打包成zip并将其上传到新的webjob(我能够安排!!)但是,这次web作业已经运行但无法加载并运行powershell脚本。它抱怨以下错误:(不知道如何控制执行策略) System.Management.Automation.PSSecurityException:文件D:\ local \ Temp \ jobs \触发\ ScheduledTenantExpiryMonitor \ i2eejhup.fkj \ WebJobzip \ GetExpirationScript.ps1无法加载,因为在此系统上禁用了运行脚本。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=135170处的about_Execution_Policies。 ---> System.UnauthorizedAccessException的:

有人可以帮我解决这个问题吗?最终目标是按计划成功地完成我的工作。

1 个答案:

答案 0 :(得分:0)

要直接调用powershell文件,您可以接受@Thomas的建议。

Running Powershell Web Jobs on Azure websites

如果您确实想要使用控制台应用程序调用powershell命令,则可以使用Powshell .NET SDK执行此操作。它可以在WebJobs中使用.NET控制台应用程序运行powershell命令。以下是详细步骤。

  1. 使用NuGet安装System.Management.Automation dll。
  2. 使用以下方法运行powershell脚本。
  3. private static string RunScript(string scripts)
    {
        // create Powershell runspace
        Runspace runspace = RunspaceFactory.CreateRunspace();
        // open it
        runspace.Open();
        // create a pipeline and feed it the script text 
        Pipeline pipeline = runspace.CreatePipeline();
    
        pipeline.Commands.AddScript(scripts);
        pipeline.Commands.Add("Out-String");
        //execute the script
        Collection<PSObject> results = pipeline.Invoke();
        //close the runspace
        runspace.Close();
        // convert the script result into a single string
        StringBuilder stringBuilder = new StringBuilder();
        foreach (PSObject obj in results)
        {
            stringBuilder.AppendLine(obj.ToString());
        }
        return stringBuilder.ToString();
    }
    
    1. 使用以下代码测试上方法。 command.ps1文件包含Get-Process命令。
    2. string fileName = "command.ps1";
      string scriptText = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + fileName);
      Console.Write(scriptText);
      

      以下是WebJob中Get-Process命令的输出。

      enter image description here