PowerShell:结束 MS-Word-Process 需要很长时间

PowerShell:结束 MS-Word-Process 需要很长时间

使用 PowerShell 脚本,我打开特定路径中的所有 .docx 文件并更新每个文档的目录 - 所有操作均按步骤执行(ForEach)。

更新任何文档的目录后,将保存更新的文档,然后关闭,最后一步是再次退出 Word 应用程序。

Word 窗口($word.Visible = $true)立即关闭,但是 WINWORD.EXE 进程仍然处于活动状态(在任务管理器中可见)约 3 到 5 分钟。

有人能解释一下为什么会这样吗?我预计这$word.Quit()也会立即结束 WINWORD.EXE 进程。

有什么技巧可以立即结束 WINWORD.EXE 吗?该脚本使用 Windows Server 2016 上的 Windows 任务计划程序执行。

我的代码的相关部分:

$FileList = Get-ChildItem -Path C:\ExportedDocuments -File -Filter "*.docx"
ForEach ($DocFile in $FileList) {
    
        $DocFileName = $DocFile.Name.split(".")[0]
        
        Write-Log -Message "The document: $DocFileName is being processed" -Path $LogFile -Level Info

        $word = New-Object -ComObject Word.Application
        $word.Visible = $true
        $doc = $word.Documents.Open($DocFile.FullName)
        $toc = $doc.TablesOfContents
        $toc.item(1).update()
        $doc.save()
        $doc.close()

        Remove-Variable toc
        Remove-Variable doc

        Write-Log -Message "Before word.Quit()" -Path $LogFile -Level Info
        # CleanUp
        $word.Quit()
        $null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$word)
        [gc]::Collect()
        [gc]::WaitForPendingFinalizers()
        Remove-Variable word
        
        Write-Log -Message "After word.Quit()" -Path $LogFile -Level Info
}

日志写入的相关部分:

2020-06-17 11:09:10 INFO: Before word.Quit() 
2020-06-17 11:13:27 INFO: After word.Quit()

作为加快关闭进程的第一个解决方案,我在脚本中嵌入了以下内容:$word.quit()

    $ProcessActive = Get-Process WINWORD -ErrorAction SilentlyContinue
    if($ProcessActive -eq $null)
    {
     Write-Log -Message "WINWORD process was already closed" -Path $LogFile -Level Info
    }
    else
    {
     Stop-Process -processname "WINWORD"
     Write-Log -Message "WINWORD was still running and has been stopped by the script" -Path $LogFile -Level Info
    }

相关内容