Powershell - 如何退出或关闭(不杀)Word文档(进程)?

时间:2013-08-12 15:55:18

标签: .net powershell ms-word

在我们公司,我们使用Windows应用程序生成word(2010)文档。有时文档没有正确关闭,所以另一个应用程序(是的,他们仍然称之为开发:)杀掉运行超过1分钟的单词进程。

这些被杀死的进程存储在MS Word的“文档恢复”中。在Word 2010中无法关闭这些文档恢复(选项/“保存自动回复信息...”无法解决问题)。当这些“文档恢复”中充满了文档(数十或数百)时,应用程序停止生成文档,我们需要手动清除前端。

所以,我能够编写这个脚本来识别并杀死运行时间超过10秒的进程,但有没有办法正确关闭它(不杀死它)?

我发现本教程使用powershell创建和退出word文档,但是如何使用这些MS Office方法连接特定的word进程来关闭文档?

Powershell and Word tutorial

$timer = 10
$date = Get-Date

if (Get-Process winword*) 
    { Get-Process winword | foreach { 
        if((($date - $_.StartTime).seconds) -gt $timer) {
            $procID = $_.id
            Write-Host -ForegroundColor Magenta "Process $procID is running longer than $timer seconds."
            Write-Host -ForegroundColor Green "Killing process $procID.."
            Stop-Process $procID
        }

 } }

谢谢。

2 个答案:

答案 0 :(得分:3)

您需要按照here所述附加到正在运行的Word实例,然后关闭文档:

$wd = [Runtime.Interopservices.Marshal]::GetActiveObject('Word.Application')
$wd.Documents | ? { $_.Name -eq 'some.docx' } | % {
  $_.Saved = $true
  $_.Close()
}

这必须在启动应用程序的用户的上下文中运行,并且它只会附加到首先启动的实例(通常只有一个实例正在运行)。您需要首先退出该实例,然后才能连接到第二个实例。

答案 1 :(得分:0)

您可以尝试在其中一个窗口中设置焦点,然后发送Alt F4键以关闭这些过程

http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx

有几种方法可以获取进程窗口的句柄。

祝你好运