Public/Get-GDriveError.ps1
<# .SYNOPSIS Get GoogleDrive Error responce .DESCRIPTION Get GoogleDrive Error responce .PARAMETER ErrorRecord Error record to decode .PARAMETER Exception Exception object to decode .OUTPUTS Json with error item as PSObject .EXAMPLE try { Get-GDriveItemProperty -AccessToken 'error token' -id 'error id' } catch { $err = $_ } Get-GDriveError $err .NOTES Author: Max Kozlov .LINK #> function Get-GDriveError { [CmdletBinding(DefaultParameterSetName='ex')] param( [Parameter(Mandatory, Position=0, ParameterSetName='er')] [System.Management.Automation.ErrorRecord]$ErrorRecord, [Parameter(Mandatory, Position=0, ParameterSetName='ex')] [Exception]$Exception ) $result = [PSCustomObject]@{ Type = $null StatusCode = $null Message = '' Error = '' } if ($ErrorRecord) { $Exception = $ErrorRecord.Exception } if ($Exception) { $result.Type = $Exception.GetType() $result.Message = $Exception.Message if ($Exception -is [System.Net.WebException]) { $response = $Exception.Response $result.StatusCode = $response.StatusCode $result.Message = $response.StatusDescription try { $Encoding = [Text.Encoding]::GetEncoding($response.CharacterSet) } catch { $Encoding = [Text.Encoding]::UTF8 } try { Write-Verbose "StatusCode: $($response.StatusCode)" Write-Verbose "ContentLength: $($response.ContentLength)" Write-Verbose "ContentType: $($response.ContentType)" Write-Verbose "CharacterSet: $($response.CharacterSet)" $stream = $response.GetResponseStream() try { $s = $Encoding.GetString($stream.ToArray()) try { $result.Error = $s | ConvertFrom-Json | Select-Object -ExpandProperty error } catch { Write-Warning "Can't decode error" } } finally { # ? # $stream.Close() # $stream.Dispose() } } finally { # ? # $response.Close() # $response.Dispose() } } } $result } |