# encoding: ascii
# api: powershell
# title: get-GPOReportSize
# description: HTML report output for all (= default) or specific GPO (piped from Get-GPO) with folder size
# version: 0.1
# type: script
# author: chriskenis
# license: CC0
# x-poshcode-id: 3980
# x-archived: 2013-02-28T00:46:12
# x-published: 2013-02-21T12:39:00
#
# output object contains URI to the reports
#
param(
[Parameter(Position=0,ValueFromPipeline=$True)]$GPOs = @(Get-GPO -All),
[string] $Reportfolder = [Environment]::getfolderpath("mydocuments") + "\GPOreports"
)
begin{
$script:GPObj = @()
$domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name
$startfolder = "\\$domain\SYSVOL\$domain\Policies"
write-verbose "getting info from $startfolder"
Function GPOSize($objGPO){
$colItems = (Get-ChildItem "$("$startfolder\`{")$($objGPO.Id)$("`}")" -recurse | Measure-Object -property length -sum)
$Result = "{0:N2}" -f ($colItems.sum / 1KB) + " KB"
write-verbose "the size for $objGPO is $Result"
return $Result
}
}# end begin
process{
foreach ($GPO in $GPOs){
write-verbose "getting GPO $($GPO.DisplayName)"
$DateRevMin = get-date -uformat "%Y-%m-%d"
New-Item $Reportfolder\$DateRevMin -ItemType directory -Force | out-null
$OutPath = $Reportfolder + "\" + $DateRevMin + "\" + $GPO.DisplayName + ".html"
Get-GPOReport $GPO.Id -ReportType html -Path $OutPath
$script:GPObj += New-Object PSObject -Property @{
GPName = $GPO.DisplayName
GPGUID = $GPO.ID
Size = $(GPOSize $GPO)
Report = $OutPath
}
}
}# end process
end{
$script:GPObj
}
# alternative oneliner to get reports for all GPO objects in domain
# Get-GPO -All | %{Get-GPOReport -guid $_.id -ReportType html -Path (join-path -path "c:\temp" -childpath "$($_.displayname).html")}