使用Scripting Guy's code,我可以创建一个显示与计算机上文件相关联的元数据的csv:
我想在此csv中添加一个附加列,其中包含文件的全部内容。我找到了Get-Content cmd并能够使其正常工作,但是我不知道如何将其插入代码中。
我尝试了多种方法:
if($objFolder.getDetailsOf($File, $a))
{
$hash += @{$($objFolder.getDetailsOf($objFolder.items, $a)) =
$($objFolder.getDetailsOf($File, $a))
& $($objFolder.get-content($File, $a)) }
$FileMetaData | Add-Member $hash
$hash.clear()
} #end if
错误代码:哈希文字不完整。
if($objFolder.getDetailsOf($File, $a))
{
$hash += @{$($objFolder.getDetailsOf($objFolder.items, $a)) =
$($objFolder.getDetailsOf($File, $a)) }
$FileMetaData | Add-Member $hash
$FileMetData | Get-Content($objFolder)
$hash.clear()
} #end if
错误代码:找不到接受参数'recurse'的位置参数
编辑:这是完整的代码:
Function Get-FileMetaData
{
Param([string[]]$folder)
foreach($sFolder in $folder)
{
$a = 0
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.namespace($sFolder)
foreach ($File in $objFolder.items())
{
$FileMetaData = New-Object PSOBJECT
for ($a ; $a -le 266; $a++)
{
if($objFolder.getDetailsOf($File, $a))
{
$hash += @{$($objFolder.getDetailsOf($objFolder.items, $a)) =
$($objFolder.getDetailsOf($File, $a))}
$FileMetaData | Add-Member $hash
$hash.clear()
} #end if
} #end for
$a=0
$FileMetaData
} #end foreach $file
} #end foreach $sfolder
} #end Get-FileMetaData
$picMetadata = Get-FileMetaData -folder (Get-childitem C:\Olivia\ -Recurse -Directory).FullName
$picMetadata |
Select Name,'Date created','Folder name'|
Export-CSV -Path C:\Olivia\metadata.csv -NoTypeInformation
答案 0 :(得分:1)
好的,所以问题出在哪里放置获取内容
您内部有3个循环。
最向外的是对于参数中的文件夹数组中的每个文件夹。这将创建一个shell com对象并获取有关该文件夹的信息。
下一个循环遍历文件夹内的每个项目。并创建一个PSObject $ FileMetaData
最后一个也是最内部的,它通过266个选项循环获得项目详细信息。然后将它们添加到PSObject。
第2圈是我们需要向PS对象添加新属性并添加内容的地方,因此每个Item仅循环一次。我们还需要确保它不是文件夹,因为文件夹没有文件内容。
这是在第二个循环中添加到函数的更改
$FileMetaData | Add-Member -MemberType NoteProperty -Name Content -Value $(
If($File.IsFolder -eq $false){
Get-Content $File.Path
}else{
$null
}
)
这是该函数的重制
Function Get-FileMetaData{
Param([string[]]$folder)
foreach($sFolder in $folder){
$a = 0
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.namespace($sFolder)
foreach ($File in $objFolder.items()){
$FileMetaData = New-Object PSOBJECT
for ($a ; $a -le 266; $a++)
{
if($objFolder.getDetailsOf($File, $a))
{
$hash += @{$($objFolder.getDetailsOf($objFolder.items, $a)) =
$($objFolder.getDetailsOf($File, $a)) }
$FileMetaData | Add-Member $hash
$hash.clear()
}
}
$a=0
$FileMetaData | Add-Member -MemberType NoteProperty -Name Content -Value $(
If($File.IsFolder -eq $false){
Get-Content $File.Path
}else{
$null
}
)
$FileMetaData
}
}
}