如何阻止Excel进程在PowerShell脚本之后在后台运行?

无论我尝试什么,无论我在PowerShell脚本的末尾抛出什么命令,Excel 2013都会继续在Windows 10的后台运行。 我已经尝试将我发现的所有build议添加到脚本的末尾,并且我打开的唯一Excel对象仍然保持打开状态。 这是我的脚本结尾处的内容。 还有其他build议吗?

## Quit Excel and Terminate Excel Application process: $xlsxwb.quit $xlsxobj.Quit [System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsxobj) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsxwb) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsxSh1) Start-Sleep 1 'Excel processes: {0}' -f @(Get-Process excel -ea 0).Count 

我遇到了同样的问题,并尝试了各种解决scheme,但没有成功 我开始释放所有保存为variables的COM对象,而不仅仅是工作簿,工作表和Excel应用程序。

例如,采取以下示例代码:

 $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $False $Workbook = $Excel.Workbooks.Open("C:\Temp\test.xlsx") $Worksheet = $Workbook.Worksheets.Item(1) $UsedRange = $Worksheet.UsedRange $Range = $Worksheet.Range("A1:B10") $Workbook.Close() $Excel.Quit() [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Range) [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($UsedRange) [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Worksheet) [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook) [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) [GC]::Collect() 

如果您只取出一个ReleaseComObject语句,则Excel进程将保持打开状态。 在我的代码中,我首先释放所有的范围,表等,然后我做工作表,工作簿,最后是Excel应用程序本身。 然后,因为这似乎只有90%的时间工作,我最后添加垃圾收集命令,并最终有一个似乎每次工作,而不必杀死进程的解决scheme。

注意 :我的系统是使用PowerShell v5和Office 2013的Windows 8.1。