从ASP.NET IIS运行时,Powershell启动作业,等待作业,主机线程永远
我目前正在尝试使用Power
Shell构建一个线程清理脚本,该脚本是从IIS启动的.
我使用powershell远程处理创建了一个线程“由所有者杀死进程”,从与清理脚本相同的服务器列表运行,这没有问题. $jobs = @() foreach ($comp in $comps) { $jobs += start-job -FilePath ("CleanupJob.ps1") -ArgumentList $comp,$username Write-Host "Started Job on: $comp" } foreach($job in $jobs) { $job | wait-job | out-null receive-job $job.ID } Remove-Job -State Completed 当我从powershell控制台运行我的脚本时,整个过程运行完美,主线程启动28个新进程,启动与每个服务器的远程连接,并等待所有作业完成.完成后,我得到输出,主机线程存在.全部按计划运行. 当我从我的asp.net应用程序运行它时不是这样,我为我的28个服务器中的每个服务器获得“开始工作:$comp”,但只有前14个服务器的结果,然后主机线程就在那里. (直到我用火杀死它,我的输出返回到asp.net网页) 当我从asp.net页面运行它时,我无法看到脚本中发生了什么.我可以看到cpu / ram使用率下降到与从PSconsole运行它时相同的水平,但我的主线程从不关闭.所以我确实认为脚本按照假设工作,但我的网页挂起,直到主线程关闭(它从来没有,如上所述). 这就是我调用脚本的方式(不是漂亮的.net< 3 powershell方式:) public string RunProgramme(string scriptpath,string arguments) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = @"powershell.exe"; startInfo.Arguments = "& '"+scriptpath+"' "+ arguments; //return startInfo.Arguments; startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true; Process process = new Process(); process.StartInfo = startInfo; process.Start(); string output = process.StandardOutput.ReadToEnd(); string errors = process.StandardError.ReadToEnd(); return output; } 神秘感加深了,将这一行添加到我的线程工作中 Invoke-Command -Session $session -ScriptBlock {param($path) net send mymachine $path} -Args $msg 当我从IIS运行我的脚本时,我收到来自每台机器的消息. 解决方法
作为一个说明,你有一些不必要的东西正在发生.
foreach ($comp in $comps) { start-job -FilePath ("CleanupJob.ps1") -ArgumentList $comp,$username Write-Verbose "Started Job on: $comp" } Get-Job | Wait-Job | Out-Null Remove-Job -State Completed PowerShell已经构建了一份工作清单;在$jobs变量中没有必要这样做,也不需要枚举它们来进行等待. 当然,您可以在代码中使用$jobs来做其他事情 – 但只是想确保其他人看到这个替代方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – GCFrame在WinDBG中输出!clrstack命令意味着什么
- 如何确定asp.net网址是否已被“重写”?
- ASP.NET Core 3.1 WebApi部署到腾讯云CentOS 7+Docker
- asp.net-mvc – 我应该如何管理ASP.NET MVC 4应用程序中的成
- asp.net-mvc – 尝试将asp.net web发布到Azure时,Visual St
- ASP.Net的Web TWAIN扫描解决方案?
- asp.net-mvc – 在MVC 3 RC中实现TransferResult – 不起作
- 将ASP.Net MVC开发和ASP.net Web表单开发混合在同一组产品中
- 压力测试ASP.Net应用程序
- asp.net – 如何使用ScriptManager删除IE8 ssl警告消息“您
- .net – 如何更改乌节纪录库
- asp.net – 我可以使用msbuild打包带有发布配置文
- 在提供页面之前确定ASP.NET页面视图状态的大小
- asp.net-mvc – 在REST Web API调用中返回复杂对
- asp.net – 如何结合ASP MVC 5和Emberjs
- asp.net-mvc-4 – 获取上下文是不可构建的.添加一
- asp.net-mvc – Html.Actionlink作为Button效果
- asp.net – 我从添加引用对话框中找不到System.W
- 浅析微软的网关项目 -- ReverseProxy
- asp.net – 什么Request.Params [“key”]呢?