Найдите с PowerShell последнее сохраненное слово и документы Excel - PullRequest
2 голосов
/ 13 апреля 2011

У меня есть папка с подпапками, и я хочу запустить скрипт powershell, который находит все офисные документы (на данный момент word и excel 2003, 2007 и 2010) и печатает свойство «последний сохраненный», которое мы можем найти.на свойствах, вкладка сведений о файлах.

Кто-нибудь может помочь?

--- решение ---

$word = New-Object -Com Word.Application
$word.Visible = $false #to prevent the document you open to show
$doc = $word.Documents.Open($path)

$binding = "System.Reflection.BindingFlags" -as [type]
Foreach($property in $doc.BuiltInDocumentProperties) {
   try {
      $pn = [System.__ComObject].invokemember("name",$binding::GetProperty,$null,$property,$null)
      if ($pn -eq "Last author") {
         $lastSaved = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$property,$null)
         write-host "Last saved by: "$lastSaved      
      }        }
   catch { }
}

$doc.Close()
$word.Quit()

Были ли внесены некоторые коррективы в правильный ответ исейчас работает.

1 Ответ

5 голосов
/ 13 апреля 2011

Это не так просто, как можно было бы надеяться. Вы можете легко открыть документ Word из Powershell с помощью

$word = New-Object -COM Word.Application
$word.Visible = $false #to prevent the document you open to show
$doc = $word.Document.Open("path-to-document")

Но свойства Document хранятся в свойстве BuiltInDocumentProperties, которые сами по себе являются динамическими COM-объектами (и, следовательно, не доступны напрямую)

Метод, который я использовал, состоит в том, чтобы обойти каждое из этих свойств и затем получить значение:

$binding = "System.Reflection.BindingFlags" -as [type]
Foreach($property in $doc.BuiltInDocumentProperties) {
   try {
      $pn = [System.__ComObject].invokemember("name",$binding::GetProperty,$null,$property,$null)
      if ($pn -eq "Last save time") {
         $lastSaved = [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$property,$null)
      }
   }
   catch { }
}

Вы можете получить имена всех доступных свойств, просто напечатав переменную $ pn.

...