The following script takes 3 input’s the directory to start searching from, the file extesion we are searching for (eg. .xml) and the file name to output the results as CSV to. If a result file isn’t supplied then the results are dumped to the screen.
The most interesting part of this script is this @{Name=”MB”;expression={“{0:N2}” -f ($_.Length / 1MB)} which allows you to take a property from an object and effectively create a new object. Excellent for modify the format and name of the displayed property.
if ($args.Length -lt 2){ Write-Host Write-Host "Script: findall.ps1" -foregroundcolor yellow Write-Host "Usage: findall.ps1 <path> <extension> <output>" -foregroundcolor yellow Write-Host Write-Host "findall will find all files recursively from <path>" Write-Host "which have this <extension>. The results are" Write-Host "exported to csv file <output> or if <output> isn't" Write-Host "provided the results are dumped to the screen" } else { $Dir = get-childitem $args[0] -recurse $extension = $args[1] $List = $Dir | where {$_.extension -eq "$extension"} if ($args.Length -eq 3){ $List | select-object @{Name="Directory";expression={$_.Directory}},@{Name="Name";expression={$_.Name}},@{Name="MB";expression={"{0:N2}" -f ($_.Length / 1MB)}}| Export-Csv $args[2] -NoType } else { $dirarg = $args[0] Write-Host "Results for search of $dirarg looking for $extension files:" $List | ft @{label="Directory";expression={$_.Directory}},@{label="Name";expression={$_.Name}},@{label="MB";expression={"{0:N2}" -f ($_.Length / 1MB)}} } }