Reputation: 41
echo " "
$date1 = Get-Date
Write-Host -foreground Yellow -background Black "Script Started at $date1"
$path = "\*"
get-childitem $path | where {$_.PSIsContainer} | foreach {
$size = (Get-ChildItem $_ -recurse | where {!$_.PSIsContainer} | Measure-Object -Sum Length).Sum
$size = "{0:N2}" -f ($size / 1MB) + " MB"
$obj = new-object psobject
add-member -inp $obj noteproperty Path $_.fullName
add-member -inp $obj noteproperty "Size(MB)" $size
[array]$report += $obj
}
#display the table
$a = "<style>"
$a = $a + "BODY{background-color:green;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 2px;padding: 0px;border-style: solid;border-color: black;background-color:Yellow; font-family: Arial; font-size: 12pt}"
$a = $a + "TD{border-width: 2px;padding: 2px 6px 2px 3px;border-style: solid;border-color: black;background-color:Azure; font-family: Arial; font-size: 10pt}"
$a = $a + "</style>"
$report | Sort 'Size' -Descending | ConvertTo-HTML -head $a -title "Process Information" -body "<H2>Service Information</H2>"| Out-File -Append c:\temp\folder.html
$date2 = Get-Date
echo " "
Write-Host -foreground Yellow -background Black "Script Ended at $date2"
echo " "
Above code is working great to me, help is much appreciated for the below help.
Here my requirement is to add sum of 2nd column volues and append the output to the last line of the above code output html(c:\temp\folder.html) as,
Path | Size(MB)
C:\NVIDIA\Displaydriver | 400 MB
* | 860 MB
* | 100 MB
* | * MB
* | * MB
Total | 1000 MB(sum of all numbers in 2nd column values)
and also i need to align the 2nd column values and Total row to CENTER.
Please Help
Upvotes: 3
Views: 27418
Reputation: 1
I had a similar need and here is my simple solution:
$stuff=get-stuff
$results=
foreach ($item in $stuff) {
$item | select column1,@{N="Column 2";E={$_.column2}},description,created,@{N="Size (GB)";E={"{0:N2}" -f $_.sizegb}}
}
$results_sorted=@($results | sort created)
$results_sorted+=$item | select @{N="column1";E={"Totals"}},@{N="Column 2";E={$null}},@{N="Description";E={$null}},@{N="Created";E={$null}},@{N="Size (GB)";E={($results | Measure-Object "size (gb)" -Sum).Sum}}
$results_sorted | ft column1,"Column 2",Description,Created,"Size (GB)"
Upvotes: 0
Reputation: 5570
$total = 0
$report | % {[float]$tmp = $_."Size(MB)".TrimEnd(" MB"); $total += $tmp}
Then you can just add the $total
object to your custom $report
object before you convertTo-html and bango. Thanks for the neat script.
Only thing that confused me a little was your () your size property of $report makes PS think its a method, thus the quotes. Is not the best convention, but it works.
More explicitly :
...
[array]$report += $obj
}
$total = 0
$report | % {[float]$tmp = $_."Size(MB)".TrimEnd(" MB"); $total += $tmp}
$obj = new-object psobject
add-member -inp $obj noteproperty Path "Total Size: "
add-member -inp $obj noteproperty "Size(MB)" $total
[array]$report += $obj
#display the table
...
Also, Remove | Sort Size -Descending
for the total to appear on the bottom.
Upvotes: 0
Reputation: 201692
To sum the sizes do this:
$totalSize = ($report | Measure-Object 'Size(MB)' -Sum).Sum
Upvotes: 12