用powershell查找word和excel文档的最后保存者

|| 我有一个包含子文件夹的文件夹,我想运行一个Powershell脚本来查找所有Office文档(目前是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()
对正确答案做了一些调整,现在可以正常工作了。     
已邀请:
这并不像人们希望的那么容易。您可以轻松地从Powershell中打开Word文档
$word = New-Object -COM Word.Application
$word.Visible = $false #to prevent the document you open to show
$doc = $word.Document.Open(\"path-to-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变量即可获得所有可用属性的名称。     

要回复问题请先登录注册