Common.psm1
<#PSScriptInfo .VERSION 1.0 .GUID 2c1a2f98-e781-403c-9c81-85b736767abc .AUTHOR RaviCKolandaiswamy .COMPANYNAME .COPYRIGHT .TAGS .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .PRIVATEDATA #> <# .DESCRIPTION Basic Functions for calling various APIs #> #Get public and private function definition files. #check PS version for this, PS 6 and above use -SkipCertificateCheck for Invoke-RestMethod if ($PSVersionTable.PSVersion.Major -lt 6) { #Ignore SSL errors If ($Null -eq ([System.Management.Automation.PSTypeName]'TrustAllCertsPolicy').Type) { Add-Type -Debug:$False @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ } [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy } #Enable TLS, TLS1.1, TLS1.2 in this session if they are available IF([Net.SecurityProtocolType]::Tls) {[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls} IF([Net.SecurityProtocolType]::Tls11) {[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11} IF([Net.SecurityProtocolType]::Tls12) {[Net.ServicePointManager]::SecurityProtocol=[Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12} function Invoke-RestApiRequest { [CmdletBinding(DefaultParameterSetName = 'EndpointName')] param ( [Parameter(ParameterSetName = 'Endpoint')] $url, [Parameter(ParameterSetName = 'Endpoint')] $user, [Parameter(ParameterSetName = 'Endpoint')] $pass, [Parameter(ParameterSetName = 'EndpointName')] $endpointName, [Parameter(ParameterSetName = 'EndpointName')] [Parameter(ParameterSetName = 'Endpoint')] $relativeUrl, [Parameter(ParameterSetName = 'EndpointName')] [Parameter(ParameterSetName = 'Endpoint')] $jsonBody, [Parameter(ParameterSetName = 'EndpointName')] [Parameter(ParameterSetName = 'Endpoint')] $method = 'GET' ) if ($PSCmdlet.ParameterSetName -eq 'EndpointName') { $connection = Get-ApiConnection $endpointName $url = $connection.ApiEndpointUrl $user = $connection.ApiUser $pass = $connection.ApiKey } $decodedCreds =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass)) $pair = "$($user):$($decodedCreds)" $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair)) $basicAuthValue = "Basic $encodedCreds" $Headers = @{ Authorization = $basicAuthValue } $params = @{ Uri = $url.TrimEnd('/') + '/' + $relativeUrl.TrimStart('/') Headers = $Headers Method = $method Body = $jsonBody ContentType = 'application/json' } Write-Output "URL: $($params.Uri)" return Invoke-RestMethod @params -SkipCertificateCheck } function Add-ApiConnection { $name = Read-Host 'API Connection Name' $url = Read-Host 'API Endpoint Url' $user = Read-Host 'API User' $key = Read-Host "API Key" -AsSecureString $enc = $key | ConvertFrom-SecureString $apiConnection = @{ Name = $name ApiEndpointUrl = $url ApiUser = $user ApiKey = $enc } $json = ConvertTo-Json $apiConnection $json | Out-File "$name.dat" } function Get-ApiConnection { param ( $name ) if (!(Test-Path $name)) { $fileName = "$name.dat" } else { $fileName = $name } if (!(Test-Path $fileName)) { throw "Local Endpoint data file does not exist for the given connection name: $fileName" } $connectionData = Get-Content $fileName | ConvertFrom-Json $url = $connectionData.psobject.Properties['ApiEndpointUrl'].Value $user = $connectionData.psobject.Properties['ApiUser'].Value $enc = $connectionData.psobject.Properties['ApiKey'].Value $key = $enc | ConvertTo-SecureString $connection = @{ Name = $name ApiEndpointUrl = $url ApiUser = $user ApiKey = $key } return $connection } # SIG # Begin signature block # MIIOCwYJKoZIhvcNAQcCoIIN/DCCDfgCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUjuMCWd2Vmu/ujpe88IWiI+O7 # 0l+gggtCMIIFWjCCBEKgAwIBAgIQDO0lEK+T1uQiVg3lGt++5DANBgkqhkiG9w0B # AQsFADB9MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVy # MRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEj # MCEGA1UEAxMaQ09NT0RPIFJTQSBDb2RlIFNpZ25pbmcgQ0EwHhcNMTcxMDEzMDAw # MDAwWhcNMjExMDEzMjM1OTU5WjCBojELMAkGA1UEBhMCVVMxDjAMBgNVBBEMBTk4 # MDUyMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHUmVkbW9uZDESMBAGA1UECQwJU3Vp # dGUgMjAwMRowGAYDVQQJDBE4MjAxIDE2NHRoIEF2ZSBORTEZMBcGA1UECgwQQ0xP # VUQgQVNTRVJUIExMQzEZMBcGA1UEAwwQQ0xPVUQgQVNTRVJUIExMQzCCASIwDQYJ # KoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3TRJvdYkx0p/ETrd2ZDE42azIJ4qsR # SrFIrV2Ac0rSRry9gouPMNgPGCdvcLkDj247i5LuJK1G/kXK27cCnefXgiiy7IZz # XCzYIr+rhQ2IpZFDQHRDu8gAHthtCrW/0DiDZZLOqAfQipoaJiZLktfw1ExMjoZO # lzux00hH/8BasYAaV2wWR3MPEqt8ehtOInop7vUKXHBeHqlS0vGZpmZmSooqnOqo # e/+Ik7rBODjfWbS/ukEEz3uT5tQAfbaCqe0AI7jy+Qguag20pUSJZI15tzoUGDzu # QF0IIhDZRUhrs9MVGlBCHPcQg5nAfll1xeyAXDGvOTUVNbe7p20H0tECAwEAAaOC # Aa4wggGqMB8GA1UdIwQYMBaAFCmRYP+KTfrr+aZquM/55ku9Sc4SMB0GA1UdDgQW # BBQDFhoCqrRSPk96X5/uWmKZzc0GfjAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/ # BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAzARBglghkgBhvhCAQEEBAMCBBAwRgYD # VR0gBD8wPTA7BgwrBgEEAbIxAQIBAwIwKzApBggrBgEFBQcCARYdaHR0cHM6Ly9z # ZWN1cmUuY29tb2RvLm5ldC9DUFMwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2Ny # bC5jb21vZG9jYS5jb20vQ09NT0RPUlNBQ29kZVNpZ25pbmdDQS5jcmwwdAYIKwYB # BQUHAQEEaDBmMD4GCCsGAQUFBzAChjJodHRwOi8vY3J0LmNvbW9kb2NhLmNvbS9D # T01PRE9SU0FDb2RlU2lnbmluZ0NBLmNydDAkBggrBgEFBQcwAYYYaHR0cDovL29j # c3AuY29tb2RvY2EuY29tMB8GA1UdEQQYMBaBFGluZm9AY2xvdWRhc3NlcnQuY29t # MA0GCSqGSIb3DQEBCwUAA4IBAQCkmEma81+PRWa1v+En+dBfFF0TlfrnwXHQeU6a # qGRxFWJO2ORTlj8TyTJZNQp7/5senwqGOkhZyBiUbDDz+mgpS3dD8+OTB+LPeTC0 # qxA2FwZan2yLiMyJ+tzWoMZThxWGdKr//9SwglLk6sjgAYeQ8zw0eLC3R5GkGZKE # ZJdlZkeZj3OcjDZ+tsB0YeyrvzQApaAHxROJjPFmFNJulHkGTOIftgAYTZOLCuBw # UjveYnsgiOjey0ljXb94Xfiy5V7F+Tg3hKmu+ykDthEr04omYgun4JRB++4ZmoYy # Q9oqjKQDJM7/dnVbMh0W0D/8Ns0OepvGilKNbYYbVsLKi451MIIF4DCCA8igAwIB # AgIQLnyHzA6TSlL+lP0ct800rzANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UEBhMC # R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9y # ZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBS # U0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTMwNTA5MDAwMDAwWhcNMjgw # NTA4MjM1OTU5WjB9MQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5j # aGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGlt # aXRlZDEjMCEGA1UEAxMaQ09NT0RPIFJTQSBDb2RlIFNpZ25pbmcgQ0EwggEiMA0G # CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmmJBjd5E0f4rR3elnMRHrzB79MR2z # uWJXP5O8W+OfHiQyESdrvFGRp8+eniWzX4GoGA8dHiAwDvthe4YJs+P9omidHCyd # v3Lj5HWg5TUjjsmK7hoMZMfYQqF7tVIDSzqwjiNLS2PgIpQ3e9V5kAoUGFEs5v7B # EvAcP2FhCoyi3PbDMKrNKBh1SMF5WgjNu4xVjPfUdpA6M0ZQc5hc9IVKaw+A3V7W # vf2pL8Al9fl4141fEMJEVTyQPDFGy3CuB6kK46/BAW+QGiPiXzjbxghdR7ODQfAu # ADcUuRKqeZJSzYcPe9hiKaR+ML0btYxytEjy4+gh+V5MYnmLAgaff9ULAgMBAAGj # ggFRMIIBTTAfBgNVHSMEGDAWgBS7r34CPfqm8TyEjq3uOJjs2TIy1DAdBgNVHQ4E # FgQUKZFg/4pN+uv5pmq4z/nmS71JzhIwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB # /wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYDVR0gBAowCDAGBgRV # HSAAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NP # TU9ET1JTQUNlcnRpZmljYXRpb25BdXRob3JpdHkuY3JsMHEGCCsGAQUFBwEBBGUw # YzA7BggrBgEFBQcwAoYvaHR0cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPUlNB # QWRkVHJ1c3RDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2Nh # LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAAj8COcPu+Mo7id4MbU2x8U6ST6/COCwE # zMVjEasJY6+rotcCP8xvGcM91hoIlP8l2KmIpysQGuCbsQciGlEcOtTh6Qm/5iR0 # rx57FjFuI+9UUS1SAuJ1CAVM8bdR4VEAxof2bO4QRHZXavHfWGshqknUfDdOvf+2 # dVRAGDZXZxHNTwLk/vPa/HUX2+y392UJI0kfQ1eD6n4gd2HITfK7ZU2o94VFB696 # aSdlkClAi997OlE5jKgfcHmtbUIgos8MbAOMTM1zB5TnWo46BLqioXwfy2M6FafU # FRunUkcyqfS/ZEfRqh9TTjIwc8Jvt3iCnVz/RrtrIh2IC/gbqjSm/Iz13X9ljIwx # VzHQNuxHoc/Li6jvHBhYxQZ3ykubUa9MCEp6j+KjUuKOjswm5LLY5TjCqO3GgZw1 # a6lYYUoKl7RLQrZVnb6Z53BtWfhtKgx/GWBfDJqIbDCsUgmQFhv/K53b0CDKieoo # fjKOGd97SDMe12X4rsn4gxSTdn1k0I7OvjV9/3IxTZ+evR5sL6iPDAZQ+4wns3bJ # 9ObXwzTijIchhmH+v1V04SF3AwpobLvkyanmz1kl63zsRQ55ZmjoIs2475iFTZYR # PAmK0H+8KCgT+2rKVI2SXM3CZZgGns5IW9S1N5NGQXwH3c/6Q++6Z2H/fUnguzB9 # XIDj5hY5S6cxggIzMIICLwIBATCBkTB9MQswCQYDVQQGEwJHQjEbMBkGA1UECBMS # R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD # T01PRE8gQ0EgTGltaXRlZDEjMCEGA1UEAxMaQ09NT0RPIFJTQSBDb2RlIFNpZ25p # bmcgQ0ECEAztJRCvk9bkIlYN5RrfvuQwCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcC # AQwxCjAIoAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYB # BAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFDA07ndCZ4i1 # s51d8EAwoIY2tkg8MA0GCSqGSIb3DQEBAQUABIIBAKUa/JJ1IcsiJqAXRfKQ3kwL # nhoisQC5wcLdjQ1jTouyqsWcWaU04tOnayliTE8S/CP6o/eDeJW8c+Mi1imjY5UP # 5ThFBTPTMKam3t8jH5OhXsMI5L0ZGbHe+Fqfd5++FB01gXpK18PD74IfPWBifZak # D/ngFosbNUkjqQSvN8uccFADYSXDt6E++TRoXCBmQTtuSpEhMDDiuauMXQsaWkIc # 0dfpXH7ZKq2cyhA/2Yx0yO7htKCSz4KZFXo99fOMepfFSoTfPKWm31OJb8YrmCf2 # /DFDRZAywgfueuUUDYh0HcMT4jAzuqhj0U+TQgATGiVL+9XM/lYZXqQT6KEcoT8= # SIG # End signature block |