ASP.NET进程启动PowerShell脚本IIS 7.5

时间:2011-10-21 20:14:39

标签: asp.net iis-7.5

所有在我的开发机器上工作正常,但如果部署到IIS,则该过程无法启动。我正在通过

启动一个powershell脚本
    private void RunScript()
    {
        Process process = null;
        try
        {
            int timeout = 1800000;
            var startInfo = new ProcessStartInfo
            {
                FileName = @"powershell.exe",    
                Arguments = string.Format("{0} {1}", "\path\toscript", "myParam"),
                UseShellExecute = false,
                CreateNoWindow = true
            };                   

            process = Process.Start(startInfo);
            process.WaitForExit(timeout);
        }
        finally
        {
            if (!process.HasExited)
            {
                if (process.Responding)
                    process.CloseMainWindow();
                else
                    process.Kill();
            }
            if (process != null)
            {
                process.Close();
                process.Dispose();
            }
        }  
    }

这是为其运行的应用程序池配置的内容。

流程模型
- >身份=域管理员的域用户。
- >加载用户个人资料=真

Web App
身份验证是Windows

我还需要配置什么才能运行Process?

3 个答案:

答案 0 :(得分:3)

作为Start-Automating建议我最终做到了这一点:

            using (Runspace runSpace = RunspaceFactory.CreateRunspace())
        {
            try
            {
                runSpace.Open();
                RunspaceInvoke scriptInvoker = new RunspaceInvoke(runSpace);
                scriptInvoker.Invoke("Set-ExecutionPolicy Unrestricted"); 
                using (Pipeline pipeLine = runSpace.CreatePipeline())
                {                        
                    var myCommand = new Command(scriptPath);                           
                    var myParam1 = new CommandParameter("-paramName", "someValue"); 
                    myCommand.Parameters.Add(myParam1);
                    pipeLine.Commands.Add(myCommand);       
                    pipeLine.Commands.Add("Out-String");
                    Collection<PSObject> returnObjects = pipeLine.Invoke();
                    runSpace.Close();

                    return returnObjects;                                              
                }
            }
            finally 
            {
                runSpace.Close();
            }
        }

在IIS服务器上,我执行了以下powershell命令“Set-ExecutionPolicy RemoteSigned”

答案 1 :(得分:1)

将PowerShell API嵌入调用.exe

会好得多

这是一个旧的链接,它将为您提供每个用户嵌入ASP.NET的PowerShell运行空间:

http://powershellpipeworks.com/

答案 2 :(得分:0)

检查powershell.exe所在的文件系统的权限。

另外,请检查Security Log中的Event Viewer是否存在身份验证错误和访问冲突。