private/Invoke-UnifiAPIRequest.ps1
function Invoke-UnifiAPIRequest { [CmdletBinding()] Param( [Parameter(Mandatory = $true)] [string] $Resource, [Parameter(Mandatory = $true)] [Microsoft.PowerShell.Commands.WebRequestMethod] $Method ) $ApiUri = Get-UnifiAPIURI -Resource $Resource $Response = $false $RequestParameters = @{ Uri = $ApiUri Method = $Method ContentType = "application/json" WebSession = $Global:UnifiAPI_Session } try { if ($Global:UnifiAPI_SkipCertificateCheck) { if ($PSVersionTable.PSVersion.Major -ge 6) { $RequestParameters.SkipCertificateCheck = $Global:UnifiAPI_SkipCertificateCheck } else { if (-not("dummy" -as [type])) { add-type -TypeDefinition @" using System; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; public static class Dummy { public static bool ReturnTrue(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } public static RemoteCertificateValidationCallback GetDelegate() { return new RemoteCertificateValidationCallback(Dummy.ReturnTrue); } } "@ } [System.Net.ServicePointManager]::ServerCertificateValidationCallback = [dummy]::GetDelegate() [Net.ServicePointManager]::SecurityProtocol = ([Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12) } } $Response = (Invoke-RestMethod @RequestParameters).data } catch { Write-Error $PSItem.Exception.Message } finally { if ($PSVersionTable.PSVersion.Major -lt 6 -and $Global:UnifiAPI_SkipCertificateCheck) { [Net.ServicePointManager]::ServerCertificateValidationCallback = $null } } return $Response } |