次のように、フォルダーをスクロールしてフォルダー内の各アイテムのメタデータを表示するための複数のコード スニペットを見つけました。
function funLine($strIN)
{
$strLine = "=" * $strIn.length
Write-Host -ForegroundColor Yellow "`n$strIN"
Write-Host -ForegroundColor Cyan $strLine
}
$sfolder = "S:\Temp"
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.namespace($sFolder)
foreach ($strFileName in $objFolder.items())
{funline "$($strFileName.name)"
for ($a ; $a -le 266; $a++)
{
$a
if($objFolder.getDetailsOf($strFileName, $a))
{
$hash += @{ $($objFolder.getDetailsOf($objFolder.items, $a)) = $a.tostring() + $($objFolder.getDetailsOf($strFileName, $a)) }
$hash | out-file c:\temp\output.txt -Append
$hash.clear()
}
}
$a=0
}
しかし、私のスクリプトでは、Get-ChildItem を使用してフォルダーをループし、選択したファイルに対して getDetailsOf() を使用して MS Office ドキュメントの作成者を抽出したいと考えています。
したがって、ファイル名 (例: $strFileName) を知っている場合、$objFolder.items() の各 $strFileName のループをスキップして、$sFileName の作成者のメタデータの詳細 ($a = 20) にアクセスできますか?
「New-Object -ComObject word.application」を使用してそれが行われるのを見たことがありますが、ドキュメントを開くと信じています。そのため、多くのファイルがユーザーによってロックされている大規模なファイル システムでは、これは遅くて苦痛になる可能性があります。
選択したファイル名の $objFolder.items() のインデックスにジャンプできますか?