Get-VESites.ps1
|
function Get-VESites { <# .SYNOPSIS Return the sites list .DESCRIPTION Return the sites list .INPUTS The VE session object can be piped to the function .EXAMPLE Get-VESites Example of how to get the sites list using the VRM API .NOTES Author: Decembry Quentin #> [CmdletBinding()] [OutputType([PSCustomObject])] [Alias()] param( # The VE session # Default: the default VE session [Parameter(Mandatory=$false,ValueFromPipeline=$true)] [PSTypeName('VictronEnergy.Session')] $Session = $Script:VE_Session, # Switch to refresh data in the cache [Parameter(Mandatory=$false)] [Switch] $Extended ) begin { if ($PSBoundParameters['Debug']) { $DebugPreference = 'Continue' } if ($MyInvocation.MyCommand.ModuleName) { $Private:ThisFunction = '{0}::{1}' -f $MyInvocation.MyCommand.ModuleName, $MyInvocation.MyCommand.Name } else { $Private:ThisFunction = '{0}::{1}' -f (Get-PSCallStack)[0].ScriptName, $MyInvocation.MyCommand.Name } Write-Debug "[$Private:ThisFunction] Begin" } process { Write-Debug "[$Private:ThisFunction] Process" if (!$Session.Token) { throw 'Unable to list sites without session token' } if (!$Session.IdUser) { throw 'Unable to list sites without user id' } $Uri = $Script:VE_VrmApiBaseUri + ('users/{0}/installations' -f $Session.IdUser) if ($Extended) { $Uri += '?extended=1' } $Headers = @{ 'X-Authorization' = 'Bearer {0}' -f $Session.Token } try { Write-Debug "[$Private:ThisFunction] Send request to '$Uri'" $WebRequest = Invoke-WebRequest -UseBasicParsing -Uri $Uri -Method GET -Headers $Headers -ErrorAction Stop $Json = ConvertFrom-Json -InputObject $WebRequest.Content -ErrorAction Stop Write-Debug "[$Private:ThisFunction] Response validation" if ($Json.success -isnot [Boolean]) { throw "Invalid content received from server" } if (!$Json.success) { throw "Error occured" } Write-Debug "[$Private:ThisFunction] Processing records" foreach ($Record in $Json.Records) { Write-Debug "[$Private:ThisFunction] Record validation" if (!$Record.IdSite) { throw "Invalid response from server (missing idSite)" } if (!$Record.Name) { throw "Invalid response from server (missing name)" } Write-Debug "[$Private:ThisFunction] Create site object from record" $Hashtable = ConvertTo-Hashtable -InputObject $Record $Hashtable.PSTypeName = 'VictronEnergy.Site' $VEObject = [PSCustomObject] $Hashtable if ($VEObject.Extended) { Write-Debug "[$Private:ThisFunction] Processing Extended" $VEObject.Extended = $VEObject.Extended | ForEach-Object { if ($_.DataAttributes) { $_.DataAttributes = $_.DataAttributes | ForEach-Object { $_.PSTypeName = 'VictronEnergy.SiteExtendedDataAttributes' [PSCustomObject] $_ } } if ($_.DataAttributeEnumValues) { $_.DataAttributeEnumValues = $_.DataAttributeEnumValues | ForEach-Object { $_.PSTypeName = 'VictronEnergy.SiteExtendedDataAttributeEnumValues' [PSCustomObject] $_ } } $_.PSTypeName = 'VictronEnergy.SiteExtended' [PSCustomObject] $_ } } if ($VEObject.Tags) { Write-Debug "[$Private:ThisFunction] Processing Tags" $VEObject.Tags = $VEObject.Tags | ForEach-Object { $_.PSTypeName = 'VESiteTags' [PSCustomObject] $_ } } Write-Debug "[$Private:ThisFunction] Return site object" Write-Output -NoEnumerate -InputObject $VEObject } } catch { $_ | ForEach-Object { Write-Error $_ } } } end { Write-Debug "[$Private:ThisFunction] End" } } # SIG # Begin signature block # MIIIbQYJKoZIhvcNAQcCoIIIXjCCCFoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUJespxIdUZCRSdJqwA2UdT/4z # f/SgggX4MIICYjCCAgigAwIBAgITXwAAAAITcsrrTJecaQAAAAAAAjAKBggqhkjO # PQQDAjAkMQswCQYDVQQGEwJCRTEVMBMGA1UEAxMMSG9tZSBSb290IENBMB4XDTIy # MDUwNTE0MDMxOFoXDTMyMDUwNTE0MTMxOFowJzELMAkGA1UEBhMCQkUxGDAWBgNV # BAMTD0hvbWUgSXNzdWluZyBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDOT # aIIU+QU7LfsmyPqGkCf53SrJuaBPpb5iVILCvG3cQxL6vgIZaGRaKlzYO+lq3CnN # b4rtJW2d7rlTeehXtpWjggEUMIIBEDAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4E # FgQUYf1/nMEp3Df+Nzi+Hvk7FymPsrMwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBD # AEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUfSS6 # P6qin/3ibmvelGJQhV1r1VgwOwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL3BraS5x # ZWRpbnV4LmJlL0hvbWUlMjBSb290JTIwQ0EuY3JsMEYGCCsGAQUFBwEBBDowODA2 # BggrBgEFBQcwAoYqaHR0cDovL3BraS5xZWRpbnV4LmJlL0hvbWUlMjBSb290JTIw # Q0EuY3J0MAoGCCqGSM49BAMCA0gAMEUCIERRzfMu3vx9vb+Apud4sDkOEKhKrCEl # gSsedbjZRJ+YAiEA8BBaOqhnbnsUBIX2nty77euunwoAHrCuWzab5xJiy0UwggOO # MIIDM6ADAgECAhNRAAAAMJpCm89a8zgYAAAAAAAwMAoGCCqGSM49BAMCMCcxCzAJ # BgNVBAYTAkJFMRgwFgYDVQQDEw9Ib21lIElzc3VpbmcgQ0EwHhcNMjIwNzExMDc0 # NzQ3WhcNMjQwNzExMDc1NzQ3WjAbMRkwFwYDVQQDExBEZWNlbWJyeSBRdWVudGlu # MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjALWtmJ1AQG77y9rUBbT # HXR9FZokTP01bBWfNzk4Kenr/Xpm7Jt09PqLoNS8ToWWKRz9EkM+jg7lnLljWKcO # G+fT1TbaEwxOpncugnbrioQQonbdWpyn0P7PxlqjUQdWd5Z7xQ0Z8RO3vvERWtDA # L9QH0VBHNK4WqdWh3ElV6ogJUsy5hYxVTIU0K5VEYkIT4qvqq0RdajKavGWIr57R # EsYv52Jcyh9FNgZKGdu9NwSKZUvkwHxGsI8zmwfP1I6QRkzsqPXlpk7A8NTD3+h+ # 4Y5AprRFyAWrVNYH+UQQe2D/PjjbKtfsU9xzG9EnqJF09pVRchapis+8DbfWnoC8 # iQIDAQABo4IBfTCCAXkwOgYJKwYBBAGCNxUHBC0wKwYjKwYBBAGCNxUIhorlOcPr # DIadiwndkzuHjPAAPqb1CYWVxXgCAWQCAQowEwYDVR0lBAwwCgYIKwYBBQUHAwMw # DgYDVR0PAQH/BAQDAgeAMBsGCSsGAQQBgjcVCgQOMAwwCgYIKwYBBQUHAwMwHQYD # VR0OBBYEFAkUh200U2U2epAoy2ZvT7nwAYGBMB8GA1UdIwQYMBaAFGH9f5zBKdw3 # /jc4vh75Oxcpj7KzMD4GA1UdHwQ3MDUwM6AxoC+GLWh0dHA6Ly9wa2kucWVkaW51 # eC5iZS9Ib21lJTIwSXNzdWluZyUyMENBLmNybDBJBggrBgEFBQcBAQQ9MDswOQYI # KwYBBQUHMAKGLWh0dHA6Ly9wa2kucWVkaW51eC5iZS9Ib21lJTIwSXNzdWluZyUy # MENBLmNydDAuBgNVHREEJzAloCMGCisGAQQBgjcUAgOgFQwTRGVjZW1icnkuUUBo # b21lLmxhbjAKBggqhkjOPQQDAgNJADBGAiEAh39vHCgqIDL4XazyHPiChMbu0by+ # aFP7rdzlJmM0K6ACIQCaP4CXolxlzdfkJsoIoDIJUrunYIlZ0yxs9OSnG1qmCjGC # Ad8wggHbAgEBMD4wJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMTD0hvbWUgSXNzdWlu # ZyBDQQITUQAAADCaQpvPWvM4GAAAAAAAMDAJBgUrDgMCGgUAoHgwGAYKKwYBBAGC # NwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUv7UlesDN # Agtr2v22CCE3sb4RxtAwDQYJKoZIhvcNAQEBBQAEggEAYi6/QFzV11xNWDmzbV35 # q9ujdo+rJxXygucc2plvM+YLa6OPZm3F0cET4wyTKFkbyk5U3AvPbtpxmyFmrRFr # RNAiuXI13SqbhHCVbo6Gqid7ipSF31hBmm7QeLJN6OiqHRaAsXebCpu/ztoaOmhp # 0D/8k3C1FNU+ZBZ+WYUR4ljaYifXVLZOd+wrIU0jO1AmXH4OWle6V2ijLc7MAKfG # bWdQhZfWS1niEZti4XKKoLF7IMbXMX1LYdMV3V9mRoBrk38TgeOWogXO2UUjeFK9 # FvRqsOEePjewYbBCvP/0IaQ9E9/f+i58efFdZTPTx7UoMla45FPG1Z8+tDgCz9yE # ig== # SIG # End signature block |