New-VESession.ps1
|
function New-VESession { <# .SYNOPSIS Create a new session connected to the Victron Energy API .DESCRIPTION Long description .INPUTS No object can be piped to the function .EXAMPLE New-VESession Example of how to create a new session using the Victron Energy API .NOTES Author: Decembry Quentin #> [CmdletBinding(DefaultParameterSetName='Login')] [OutputType([PSCustomObject])] [Alias()] param( # The VRM username [Parameter(Mandatory=$true,ParameterSetName='Login')] [String] $Username, # The VRM password # Default: 1 [Parameter(Mandatory=$false,ParameterSetName='Login')] [System.Security.SecureString] $SecureString, # Set the SMS token if SMS authentication token is required [Parameter(Mandatory=$false,ParameterSetName='Login')] [String] $SmsToken, # Set this session as default [Parameter(Mandatory=$false,ParameterSetName='Demo')] [Switch] $Demo, # Set this session as default [Parameter(Mandatory=$false)] [Switch] $AsDefault ) 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 ($AsDefault) { Write-Debug "[$Private:ThisFunction] Remove default session" $Script:VE_Session = $null } if ($Demo) { Write-Debug "[$Private:ThisFunction] Sign in as 'Demo'" $Uri = $Script:VE_VrmApiBaseUri + 'auth/loginAsDemo' $Params = @{} } else { Write-Debug "[$Private:ThisFunction] Sign in as '$Username'" if (!$SecureString) { $SecureString = Read-Host -Prompt 'Enter your VRM password' -AsSecureString } $Uri = $Script:VE_VrmApiBaseUri + 'auth/login' $Params = @{ username = $Username password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureString)) } if ($SmsToken) { $Params.SmsToken = $SmsToken } } $Body = ConvertTo-Json -InputObject $Params -Compress try { Write-Debug "[$Private:ThisFunction] Send request to '$Uri'" $WebRequest = Invoke-WebRequest -UseBasicParsing -Uri $Uri -Method POST -Body $Body -ErrorAction Stop $Json = ConvertFrom-Json -InputObject $WebRequest.Content -ErrorAction Stop $Hashtable = ConvertTo-Hashtable -InputObject $Json Write-Debug "[$Private:ThisFunction] Response validation" if (!$Hashtable.token) { throw "Invalid response from server (missing token)" } if ($Demo) { $Hashtable.IdUser = 22 $Hashtable.Username = 'Demo' } elseif (!$Hashtable.IdUser) { throw "Invalid response from server (missing idUser)" } else { $Hashtable.Username = $Username } Write-Debug "[$Private:ThisFunction] Create session object from reply" $Hashtable.PSTypeName = 'VictronEnergy.Session' $VEObject = [PSCustomObject] $Hashtable if ($AsDefault) { Write-Debug "[$Private:ThisFunction] Set current session as default" $Script:VE_Session = $VEObject } Write-Debug "[$Private:ThisFunction] Return session object" Write-Output -NoEnumerate -InputObject $VEObject } catch { $_ | ForEach-Object { Write-Error $_ } } } end { Write-Debug "[$Private:ThisFunction] End" } } # SIG # Begin signature block # MIIIbQYJKoZIhvcNAQcCoIIIXjCCCFoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUALO6RzWAEQLC2ooPOBQvuAiE # 2FKgggX4MIICYjCCAgigAwIBAgITXwAAAAITcsrrTJecaQAAAAAAAjAKBggqhkjO # 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 # BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUwzHzMwN1 # CYZpsNFc/fECskg5eV4wDQYJKoZIhvcNAQEBBQAEggEAiIAgrSWLYExt5pAYnkm5 # O3cJXD0eBgHXeUJCio9PPaGGb+GaDzCnz6ssqMuYioYafIQkxBw7GJfM63L4CckM # aii6vre4pFgGEeIVzoJ+jDVy6veOXk8gCn1os+PkySd6iBQqaQom9IgLpcY5SZvU # dXpTPf7bEGaAcPAjK1Ss0W2qYMpZmpLpqUKwvyTvNwkty4FAfwlE4SqPIIIyKHq4 # P2dAuPrngOv3fImbGFX/cb5a8GTQUKBWlsg6I1CbVQ0u9XhHP+0YlR0GYdWfHIQX # if3W6xTZDPlQETrQpNTyhX6+PTFXhNWMiwOZO0gHTDEHJ0UjNc6NpD1IKwkJA5LY # dA== # SIG # End signature block |