Это должно совпадать с для Excel :
$word = [Runtime.Interopservices.Marshal]::GetActiveObject('Word.Application')
Обратите внимание на ограничение того же пользователя. Я бы порекомендовал сделать все это программно через PowerShell, , как предложено Guenther .
Если слово не запущено, работает под другим пользователем или работает от имени администратора (а PowerShell не работает от имени администратора), вы получите сообщение об ошибке:
Exception calling "GetActiveObject" with "1" argument(s): "Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))"
At line:1 char:1
+ $word = [Runtime.Interopservices.Marshal]::GetActiveObject('Word.Appl ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : COMException
В соответствии с рекомендациями убедитесь, что PowerShell и Word работают под одним и тем же пользователем. Это можно сделать, перейдя в Диспетчер задач> Сведения и проверив столбец имени пользователя для WINWORD.EXE
и powershell.exe
.
Чтобы получить конкретный документ на основе имени:
$doc = $word.Documents | Where-Object {$_.Name -eq "Document2"}
Вы можете проверить, сколько документов открыто, посмотрев на счет:
$word.Documents.Count