public/Connect-UnifiController.ps1
function Connect-UnifiController { [CmdletBinding()] Param( [Parameter(Mandatory = $true)] [System.Management.Automation.PSCredential] $Credential ) if ($Global:UnifiAPI_Session) { Write-Error "Already connected to Unifi Controller, please disconnect before making another connection." return } if (!$Global:UnifiAPI_BaseUri) { Write-Error "Unifi API Base URI has not been set." return } if (!$Global:UnifiAPI_Port) { Write-Error "Unifi API Port has not been set." return } $RequestBody = @{ username = $Credential.GetNetworkCredential().UserName password = $Credential.GetNetworkCredential().Password } | ConvertTo-Json $RequestParameters = @{ Uri = (Get-UnifiAPIURI -Resource "api/login") Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Post Body = $RequestBody ContentType = "application/json" SessionVariable = "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) } } Invoke-RestMethod @RequestParameters | Out-Null } catch { Write-Error $PSItem.Exception.Message } finally { if ($PSVersionTable.PSVersion.Major -lt 6 -and $Global:UnifiAPI_SkipCertificateCheck) { [System.Net.ServicePointManager]::ServerCertificateValidationCallback = $null } } if ($Session) { Set-Variable -Name UnifiAPI_Session -Value $Session -Scope Global -Force } else { Write-Error "No session returned from Invoke-RestMethod." } } |