2016-08-19 1 views
1

내가 시도해도 Excel 2013은 PowerShell 스크립트의 끝 부분에서 어떤 명령을 던져도 Windows 10의 백그라운드에서 계속 실행됩니다. 스크립트의 끝 부분에서 발견 한 모든 제안을 추가하려고 시도했지만 열려있는 유일한 Excel 개체는 계속 열려 있습니다. 여기 내 대본 끝 부분에있는 것이 있습니다. 다른 제안?PowerShell 스크립트 후에 Excel 프로세스가 백그라운드에서 실행되는 것을 중지하려면 어떻게합니까?

## 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 
+1

입니다 난 항상'중지-Process'하여 프로세스를 죽이고 결국. 썰매 망치 접근법. 그 밖의 어떤 것도 좋은 일을하는 것처럼 보이지 않습니다. –

답변

1

동일한 문제가 발생하여 여러 가지 해결책을 시도했지만 성공하지 못했습니다. 통합 문서, 워크 시트 및 Excel 응용 프로그램뿐만 아니라 변수로 저장 한 COM 개체를 모두 릴리스하기 시작할 때 더 가까워졌습니다.

는 예를 들어, 다음 예제 코드를 가지고 :

$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 응용 프로그램 자체를 수행합니다. 그런 다음 90 %의 시간 동안 만 작동하는 것처럼 보였으므로 마지막에 가비지 수집 명령을 추가하고 마지막으로 프로세스를 죽일 필요없이 매번 작동하는 솔루션을 갖게되었습니다.

: 내 시스템이 PowerShell을 v5에 포함 된 Windows 8.1 및 Office 2013

관련 문제