59 lines
1.6 KiB
PowerShell
59 lines
1.6 KiB
PowerShell
function Invoke-UnifiRequest {
|
|
[CmdletBinding()]
|
|
param(
|
|
[ValidateSet('GET', 'POST', 'PUT', 'DELETE')]
|
|
[string]$Method = 'GET',
|
|
|
|
# For site-scoped endpoints pass just the path after /api/s/{site}, e.g. '/rest/wlanconf'
|
|
# For global endpoints pass the full path, e.g. '/api/self/sites'
|
|
[Parameter(Mandatory)]
|
|
[string]$Endpoint,
|
|
|
|
[string]$Site,
|
|
|
|
[object]$Body
|
|
)
|
|
|
|
if (-not $script:UnifiSession -or -not $script:UnifiConfig) {
|
|
throw "Not connected. Run Connect-UnifiController first."
|
|
}
|
|
|
|
$baseUrl = $script:UnifiConfig.ControllerUrl
|
|
|
|
$uri = if ($Site) {
|
|
"$baseUrl/api/s/$Site$Endpoint"
|
|
} else {
|
|
"$baseUrl$Endpoint"
|
|
}
|
|
|
|
$params = @{
|
|
Method = $Method
|
|
Uri = $uri
|
|
WebSession = $script:UnifiSession
|
|
}
|
|
|
|
if ($script:UnifiConfig.SkipCertificateCheck) {
|
|
$params.SkipCertificateCheck = $true
|
|
}
|
|
|
|
if ($Method -ne 'GET' -and $script:UnifiConfig.CsrfToken) {
|
|
$params.Headers = @{ 'X-Csrf-Token' = $script:UnifiConfig.CsrfToken }
|
|
}
|
|
|
|
if ($Body) {
|
|
$params.Body = ($Body | ConvertTo-Json -Depth 10 -Compress)
|
|
$params.ContentType = 'application/json'
|
|
}
|
|
|
|
try {
|
|
Invoke-RestMethod @params
|
|
}
|
|
catch [Microsoft.PowerShell.Commands.HttpResponseException] {
|
|
$code = $_.Exception.Response.StatusCode.value__
|
|
if ($code -eq 401) {
|
|
throw "Session expired or unauthorized. Run Connect-UnifiController to re-authenticate."
|
|
}
|
|
throw "HTTP $code`: $_"
|
|
}
|
|
}
|