找到与powershell的最后保存时间的word和excel文件



我有一个带有子文件夹的文件夹,我想运行一个powershell脚本,查找所有office文档(word和excel 2003,2007和2010),并打印"最后保存"属性,我们可以在文件的属性,详细信息选项卡上找到。

有人能帮忙吗?

—solution—

$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变量获得所有可用属性的名称。

相关内容

  • 没有找到相关文章

最新更新