我有一个控制台应用程序,在其他任务中,调用一个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的:
有人可以帮我解决这个问题吗?最终目标是按计划成功地完成我的工作。
答案 0 :(得分:0)
要直接调用powershell文件,您可以接受@Thomas的建议。
Running Powershell Web Jobs on Azure websites
如果您确实想要使用控制台应用程序调用powershell命令,则可以使用Powshell .NET SDK执行此操作。它可以在WebJobs中使用.NET控制台应用程序运行powershell命令。以下是详细步骤。
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();
}