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)}}
}
}






