我有一个带有子文件夹的文件夹,我想运行一个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变量获得所有可用属性的名称。