如何用PowerShell获取Office文件的Company属性
获取Office文件的Owner和Company属性(PowerShell实现)
你可以通过PowerShell获取Windows文件属性详情栏中的Company属性,以下是具体实现方案:
一、整合Owner与Company属性的完整脚本
方法1:利用Shell.Application COM对象(兼容性好)
该方法通过Windows Shell组件读取文件的详细属性,能稳定获取Office文件的Company信息:
Get-ChildItem -Filter *.docx,*.doc,*.xlsx,*.xls,*.pptx,*.ppt | ForEach-Object { $shell = New-Object -ComObject Shell.Application $folder = $shell.Namespace($_.DirectoryName) $file = $folder.ParseName($_.Name) # 获取Company属性(索引33为常见系统的Company属性标识,若无效可按下方方法查找对应索引) $company = $folder.GetDetailsOf($file, 33) # 输出整合后的属性 [PSCustomObject]@{ FullName = $_.FullName Owner = $_.GetAccessControl().Owner Company = $company } # 释放COM对象,避免内存泄漏 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($shell) | Out-Null }
查找Company属性的正确索引
如果上述脚本中索引33无法获取到Company信息,可先执行以下命令查找当前系统中Company属性对应的索引值:
$shell = New-Object -ComObject Shell.Application $testFolder = $shell.Namespace("C:\你要测试的文件所在目录路径") for ($i=0; $i -le 299; $i++) { $propName = $testFolder.GetDetailsOf($testFolder.Items(), $i) if ($propName -eq "Company") { Write-Host "当前系统Company属性索引: $i" break } }
方法2:直接读取文件扩展属性
部分系统可通过ExtendedProperties直接获取,代码更简洁:
Get-ChildItem -Filter *.docx,*.doc,*.xlsx,*.xls,*.pptx,*.ppt | Select-Object FullName, @{Name='Owner'; Expression={$_.GetAccessControl().Owner}}, @{Name='Company'; Expression={$_.ExtendedProperties["System.Company"]}}
内容的提问来源于stack exchange,提问作者Rasec Malkic
相关产品推荐
相关产品推荐

