Powershell list recursively files attributes to csv

1.2k Views Asked by At

I am trying to fill a csv file with all the attributes of the files contained within a folder. I have troubles recovering the fileversion & assembly

$arr = @()
gci C:\Temp -recurse | ? {$_.PSIsContainer -eq $False} | % {
$obj = New-Object PSObject
$obj | Add-Member NoteProperty Directory $_.DirectoryName
$obj | Add-Member NoteProperty Name $_.Name
$obj | Add-Member NoteProperty Size (Get-Item $_.Length/1MB)
$obj | Add-Member NoteProperty Owner ((Get-ACL $_.FullName).Owner)
$obj | Add-Member NoteProperty LastAccess $_.LastAccessTime 
$obj | Add-Member NoteProperty Extension $_.Extension
$obj | Add-Member NoteProperty Creation $_.CreationTime
$obj | Add-Member NoteProperty LastWrite $_.LastWriteTime
$obj | Add-Member NoteProperty ReadOnly $_.IsReadOnly
$obj | Add-Member NoteProperty FullName $_.FullName
$obj | Add-Member NoteProperty Date (Get-Date -format "yyyy-MM-d HH:mm")
$obj | Add-Member NoteProperty Version ($_.FileVersion)
$obj | Add-Member NoteProperty Assembly ($_.AssemblyVersion)
$arr += $obj
}
$arr | Export-CSV -notypeinformation "c:\temp\File\report.csv"
3

There are 3 best solutions below

0
Ranadip Dutta On BEST ANSWER

1)The issue what you are facing is because of permission. Try running the script in elevated mode(run as administrator). 2)You should not try to save anything under C:\temp folder. Better to create a folder in D:\ or E:\ and put it over there as D:\temp_dump\report.csv 3)if you are putting get-item on the size, then that is not a valid one since you have to pick whatever inside the folder.

Below Script is working fine.

##########################################################

$arr = @()
$Folder_path="E:\PS"

gci $Folder_path | ? {$_.PSIsContainer -eq $False} | % {

$obj = New-Object PSObject

$obj | Add-Member NoteProperty Directory $_.DirectoryName

$obj | Add-Member NoteProperty Name $_.Name

$obj | Add-Member NoteProperty Size (Get-ChildItem $Folder_path | Measure-Object -property length -sum)

$obj | Add-Member NoteProperty Owner ((Get-ACL $_.FullName).Owner)

$obj | Add-Member NoteProperty LastAccess $_.LastAccessTime 

$obj | Add-Member NoteProperty Extension $_.Extension

$obj | Add-Member NoteProperty Creation $_.CreationTime

$obj | Add-Member NoteProperty LastWrite $_.LastWriteTime

$obj | Add-Member NoteProperty ReadOnly $_.IsReadOnly

$obj | Add-Member NoteProperty FullName $_.FullName

$obj | Add-Member NoteProperty Date (Get-Date -format "yyyy-MM-d HH:mm")

$obj | Add-Member NoteProperty Version ($_.FileVersion)

$obj | Add-Member NoteProperty Assembly ($_.AssemblyVersion)

$arr += $obj

}

$arr | Export-CSV -notypeinformation "E:\report.csv"
#
0
Oscar Foley On

In order to get fileversion you have to use this:

$obj | Add-Member NoteProperty Version ($_.VersionInfo.FileVersion)

You cannot get AssemblyVersion from VersionInfo

0
Esperento57 On

try this

$arr = @()
gci C:\Temp -recurse -File -Filter *.dll |  % {
$obj = New-Object PSObject
$obj | Add-Member NoteProperty Directory $_.DirectoryName
$obj | Add-Member NoteProperty Name $_.Name
$obj | Add-Member NoteProperty Size (Get-Item $_.Length/1MB)
$obj | Add-Member NoteProperty Owner ((Get-ACL $_.FullName).Owner)
$obj | Add-Member NoteProperty LastAccess $_.LastAccessTime 
$obj | Add-Member NoteProperty Extension $_.Extension
$obj | Add-Member NoteProperty Creation $_.CreationTime
$obj | Add-Member NoteProperty LastWrite $_.LastWriteTime
$obj | Add-Member NoteProperty ReadOnly $_.IsReadOnly
$obj | Add-Member NoteProperty FullName $_.FullName
$obj | Add-Member NoteProperty Date (Get-Date -format "yyyy-MM-d HH:mm")
$obj | Add-Member NoteProperty Version ($_.VersionInfo.FileVersion)
$obj | Add-Member NoteProperty Assembly ([Reflection.AssemblyName]::GetAssemblyName($_.FullName).Version)
$arr += $obj
}
$arr | Export-CSV -notypeinformation "c:\temp\File\report.csv"

you can simplify your code like this

gci C:\Temp -recurse -File -Filter *.dll |  % {
New-Object PSObject -Property @{
Directory= $_.DirectoryName
Name= $_.Name
Size= $_.Length/1MB
Owner= ((Get-ACL $_.FullName).Owner)
LastAccess= $_.LastAccessTime 
Extension= $_.Extension
Creation= $_.CreationTime
LastWrite= $_.LastWriteTime
ReadOnly= $_.IsReadOnly
FullName= $_.FullName
Date= (Get-Date -format "yyyy-MM-d HH:mm")
Version= ($_.VersionInfo.FileVersion)
Assembly= ([Reflection.AssemblyName]::GetAssemblyName($_.FullName).Version)
}
} | Export-CSV -notypeinformation "c:\temp\File\report.csv"