Как создать CSV, содержащий как метаданные файла, так и содержимое файла? - PullRequest
0 голосов
/ 05 октября 2018

Используя Сценарий парня код , я могу создать CSV, который показывает метаданные, связанные с файлами на моем компьютере:

enter image description here

Я хотел бы добавить дополнительный столбец в этот 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'

edit: вот полный код:

  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

1 Ответ

0 голосов
/ 05 октября 2018

ОК, поэтому проблема заключалась в том, куда поместить Get-контент

У вас есть 3 цикла внутри друг друга.

  1. Наибольший внешний вид - Для каждой папки в массиве папок из параметров.Этот объект создает объект оболочки com и получает информацию о папке.

  2. Следующий цикл проходит по каждому элементу внутри папки.И создает PSObject $ FileMetaData

  3. Последний и самый внутренний получает детали элемента с циклом 266 опций.Затем добавляет их в PSObject.

В цикле 2 нам нужно добавить новое свойство в объект PS и добавить содержимое, чтобы оно зацикливалось только один раз для каждого элемента.Мы также должны убедиться, что это не папка, так как папка не имеет содержимого файла.

Это было изменение, добавленное к функции во 2-м цикле

$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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...