如何使用powershell以csv格式导出文件属性

如何使用powershell以csv格式导出文件属性,powershell,Powershell,我想从一些tif文件中导出具有文件属性的csv文件 用这个命令 Get-ChildItem -Recurse C:\tifs\ | ForEach-Object {$_ | add-member -name "Owner" -membertype noteproperty ` -value (get-acl $_.fullname).owner -passthru} | Sort-Object fullname | Select FullName,CreationTime

我想从一些tif文件中导出具有文件属性的csv文件

用这个命令

Get-ChildItem -Recurse C:\tifs\ | 
ForEach-Object {$_ | add-member -name "Owner" -membertype noteproperty `
-value (get-acl $_.fullname).owner -passthru} | Sort-Object fullname | 
Select FullName,CreationTime,LastWriteTime,Length,Dimensions | 
Export-Csv -Force -NoTypeInformation C:\Test\export.csv

我可以很好地导出csv。但只要我想添加垂直分辨率之类的属性,它就会失败。我不太明白为什么。

据我所知,没有明显的PowerShell/.Net方法来获取额外的文件元数据。然而有一些基于COM的方法

检查 他们引用
您仍然需要关联数据。我通常通过构建具有相同值键控的哈希表来实现这一点,在中,您可以使用path属性对元数据进行索引,然后使用file info对象的FullName属性来引用它,这样您就可以访问这些属性。

据我所知,没有明显的PowerShell/.Net方法来获取额外的文件元数据。然而有一些基于COM的方法

检查 他们引用
您仍然需要关联数据。我通常通过构建具有相同值的哈希表来实现这一点,在中,您可以使用path属性索引元数据,然后使用file info对象的FullName属性来引用它,因此,您可以使用属性。

为了获得扩展文件属性(如维度和分辨率元数据),您必须从PowerShell内部使用Windows Visual Basic选项,正如Steven所指出的那样。下面是一个代码示例,它将为您提供结果:

$files = @()
$folder = (New-Object -ComObject Shell.Application).namespace("C:\tifs") 

# Loop through each file in folder
foreach ($f in $folder.Items()) {
  $a = 0

  # Print all the available properties (for debugging purposes)
  for ($a ; $a  -le 266; $a++) {  
    if($folder.GetDetailsOf($f, $a)) { 
      Write-Host "Property: $($folder.GetDetailsOf($folder.items, $a))"
      Write-Host "Value: $($folder.GetDetailsOf($f, $a))"
      Write-Host "Index: $($a)"
    }
  }

  # Store data in custom PowerShell object
  $obj = New-Object -TypeName PSOBJECT
  # Fill each property with the file metadata (by index number)
  $obj | Add-Member -MemberType NoteProperty -Name FullName -Value $folder.GetDetailsOf($f, 194)
  $obj | Add-Member -MemberType NoteProperty -Name CreationTime -Value $folder.GetDetailsOf($f, 4)
  $obj | Add-Member -MemberType NoteProperty -Name LastWriteTime -Value $folder.GetDetailsOf($f, 5)
  $obj | Add-Member -MemberType NoteProperty -Name Length -Value $folder.GetDetailsOf($f, 1)
  $obj | Add-Member -MemberType NoteProperty -Name Dimensions -Value $folder.GetDetailsOf($f, 31)
  # Add custom object to a collection
  $files += $obj
}

# Export collection to CSV
$files | Export-Csv -Force C:\Test\export.csv -NoTypeInformation -Encoding UTF8

为了获得扩展文件属性(如维度和分辨率元数据),您必须从PowerShell内部使用Windows Visual Basic选项,Steven指出了这一点。下面是一个代码示例,它将为您提供结果:

$files = @()
$folder = (New-Object -ComObject Shell.Application).namespace("C:\tifs") 

# Loop through each file in folder
foreach ($f in $folder.Items()) {
  $a = 0

  # Print all the available properties (for debugging purposes)
  for ($a ; $a  -le 266; $a++) {  
    if($folder.GetDetailsOf($f, $a)) { 
      Write-Host "Property: $($folder.GetDetailsOf($folder.items, $a))"
      Write-Host "Value: $($folder.GetDetailsOf($f, $a))"
      Write-Host "Index: $($a)"
    }
  }

  # Store data in custom PowerShell object
  $obj = New-Object -TypeName PSOBJECT
  # Fill each property with the file metadata (by index number)
  $obj | Add-Member -MemberType NoteProperty -Name FullName -Value $folder.GetDetailsOf($f, 194)
  $obj | Add-Member -MemberType NoteProperty -Name CreationTime -Value $folder.GetDetailsOf($f, 4)
  $obj | Add-Member -MemberType NoteProperty -Name LastWriteTime -Value $folder.GetDetailsOf($f, 5)
  $obj | Add-Member -MemberType NoteProperty -Name Length -Value $folder.GetDetailsOf($f, 1)
  $obj | Add-Member -MemberType NoteProperty -Name Dimensions -Value $folder.GetDetailsOf($f, 31)
  # Add custom object to a collection
  $files += $obj
}

# Export collection to CSV
$files | Export-Csv -Force C:\Test\export.csv -NoTypeInformation -Encoding UTF8

这帮了大忙。非常感谢。我在其他地方找到了一个脚本,但它不起作用,但这个网站上的东西解释得非常好。现在我有了我需要的csv!这帮了大忙。非常感谢。我在其他地方找到了一个脚本,但它不起作用,但这个网站上的东西解释得非常好。现在我有了我需要的csv!