Public/Reports/Get-GSUsageReport.ps1
function Get-GSUsageReport { <# .SYNOPSIS Retrieves a list of activities .DESCRIPTION Retrieves a list of activities .PARAMETER Date Represents the date for which the data is to be fetched .PARAMETER UserKey Represents the profile id or the user email for which the data should be filtered .PARAMETER EntityType Type of object. Should be one of - gplus_communities .PARAMETER EntityKey Represents the key of object for which the data should be filtered .PARAMETER Filters Represents the set of filters including parameter operator value .PARAMETER Parameters Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1 .PARAMETER PageSize Maximum number of results to return. Maximum allowed is 1000 .EXAMPLE Get-GSUsageReport -Date (Get-Date).AddDays(-30) Gets the Customer Usage report from 30 days prior #> [cmdletbinding(DefaultParameterSetName = "Customer")] Param ( [parameter(Mandatory = $true,ParameterSetName = "Customer")] [parameter(Mandatory = $true,ParameterSetName = "Entity")] [parameter(Mandatory = $true,ParameterSetName = "User")] [DateTime] $Date, [parameter(Mandatory = $true,ParameterSetName = "User")] [ValidateNotNullOrEmpty()] [String] $UserKey, [parameter(Mandatory = $true,ParameterSetName = "Entity")] [ValidateNotNullOrEmpty()] [String] $EntityType, [parameter(Mandatory = $true,ParameterSetName = "Entity")] [ValidateNotNullOrEmpty()] [String] $EntityKey, [parameter(Mandatory = $false,ParameterSetName = "Entity")] [parameter(Mandatory = $false,ParameterSetName = "User")] [String[]] $Filters, [parameter(Mandatory = $false)] [String[]] $Parameters, [parameter(Mandatory = $false,ParameterSetName = "Entity")] [parameter(Mandatory = $false,ParameterSetName = "User")] [ValidateRange(1,1000)] [Alias("MaxResults")] [Int] $PageSize = "1000" ) Begin { $serviceParams = @{ Scope = 'https://www.googleapis.com/auth/admin.reports.usage.readonly' ServiceType = 'Google.Apis.Admin.Reports.reports_v1.ReportsService' } $service = New-GoogleService @serviceParams $props = @() $props += (@{N = "Date";E = {$Date.ToString('yyyy-MM-dd')}}) } Process { try { Write-Verbose "Getting $($PSCmdlet.ParameterSetName) Usage report for $($Date.ToString('yyyy-MM-dd'))" switch ($PSCmdlet.ParameterSetName) { Customer { $request = $service.CustomerUsageReports.Get(($Date.ToString('yyyy-MM-dd'))) } Entity { $request = $service.EntityUsageReports.Get($EntityType,$EntityKey,($Date.ToString('yyyy-MM-dd'))) $request.MaxResults = $PageSize $props += (@{N = "EntityType";E = {$EntityType}}) $props += (@{N = "EntityKey";E = {$EntityKey}}) } User { if ($UserKey -ceq 'me') { $UserKey = $Script:PSGSuite.AdminEmail } elseif ($UserKey -notlike "*@*.*") { $UserKey = "$($UserKey)@$($Script:PSGSuite.Domain)" } $request = $service.UserUsageReport.Get($UserKey,($Date.ToString('yyyy-MM-dd'))) $request.MaxResults = $PageSize $props += (@{N = "UserKey";E = {$UserKey}}) } } $props += '*' foreach ($key in $PSBoundParameters.Keys | Where-Object {$_ -notin @('Date','UserKey','EntityKey','EntityType')}) { switch ($key) { Filters { $request.$key = $PSBoundParameters[$key] -join "," } Parameters { $request.$key = $PSBoundParameters[$key] -join "," } Default { if ($request.PSObject.Properties.Name -contains $key) { $request.$key = $PSBoundParameters[$key] } } } } $response = @() $warnings = @() [int]$i = 1 do { $result = $request.Execute() $response += $result.UsageReportsValue.Parameters | Select-Object $props $warnings += $result.Warnings $request.PageToken = $result.NextPageToken [int]$retrieved = ($i + $result.UsageReportsValue.Parameters.Count) - 1 Write-Verbose "Retrieved $retrieved report parameters..." [int]$i = $i + $result.UsageReportsValue.Parameters.Count } until (!$result.NextPageToken) if ($warnings) { $warnings | ForEach-Object { Write-Warning "[$($_.Code)] $($_.Message)" } } return $response } catch { if ($ErrorActionPreference -eq 'Stop') { $PSCmdlet.ThrowTerminatingError($_) } else { Write-Error $_ } } } } |