Public/Invoke-UnifiCli.ps1
|
function Invoke-UnifiCli { [CmdletBinding()] param( [Parameter(Position = 0)] [string]$Command, [Parameter(Position = 1, ValueFromRemainingArguments)] [string[]]$Arguments ) switch ($Command.ToLower()) { 'connect' { if (-not $Arguments -or $Arguments.Count -eq 0) { Write-Error "Usage: unifi-cli connect <host> [--port <n>] [--insecure] [--save]" return } $p = @{ Controller = $Arguments[0] } for ($i = 1; $i -lt $Arguments.Count; $i++) { switch ($Arguments[$i]) { '--insecure' { $p.SkipCertificateCheck = $true } '--save' { $p.Save = $true } '--port' { $p.Port = [int]$Arguments[++$i] } '--totp' { $p.Token = $Arguments[++$i] } } } Connect-UnifiController @p } 'disconnect' { Disconnect-UnifiController } 'status' { Get-UnifiConnectionStatus } 'use' { $noun = if ($Arguments.Count -gt 0) { $Arguments[0].ToLower() } else { '' } switch ($noun) { 'site' { if ($Arguments.Count -lt 2) { Write-Error "Usage: unifi-cli use site <id> (get IDs from: unifi-cli list sites)" return } $p = @{ Site = $Arguments[1] } if ($Arguments -contains '--save') { $p.Save = $true } Set-UnifiDefaultSite @p } default { Write-Warning "Unknown: unifi-cli use $noun. Try: unifi-cli use site <id>" } } } 'set' { $noun = if ($Arguments.Count -gt 0) { $Arguments[0].ToLower() } else { '' } switch ($noun) { 'wlan-password' { $p = @{} for ($i = 1; $i -lt $Arguments.Count; $i++) { switch ($Arguments[$i]) { '--ssid' { $p.Ssid = $Arguments[++$i] } '--site' { $p.Site = $Arguments[++$i] } } } if (-not $p.Ssid) { Write-Error "Usage: unifi-cli set wlan-password --ssid <name> [--site <id>]" return } Set-UnifiWlanPassword @p } default { Write-Warning "Unknown: unifi-cli set $noun. Try: unifi-cli set wlan-password --ssid <name>" } } } { $_ -in 'list', 'get', 'show' } { $target = if ($Arguments.Count -gt 0) { $Arguments[0].ToLower() } else { '' } # Parse shared flags: --site <id>, --active, --show-password $p = @{} for ($i = 1; $i -lt $Arguments.Count; $i++) { switch ($Arguments[$i]) { '--site' { $p.Site = $Arguments[++$i] } '--active' { $p.Active = $true } '--show-password' { $p.ShowPassword = $true } '--ssid' { $p.Ssid = $Arguments[++$i] } } } switch ($target) { 'sites' { Get-UnifiSite } 'devices' { Get-UnifiDevice @p } 'clients' { Get-UnifiClient @p } 'wlans' { Get-UnifiWlan @p } default { Write-Warning "Unknown target '$target'. Available: sites, devices, clients, wlans" } } } default { Write-Host "" Write-Host "UnifiCLI — Unifi Network Controller CLI" -ForegroundColor Cyan Write-Host "" Write-Host " unifi-cli connect <host> [--port <n>] [--insecure] [--save] [--totp <code>]" Write-Host " unifi-cli disconnect" Write-Host " unifi-cli status" Write-Host " unifi-cli use site <id> [--save]" Write-Host " unifi-cli list sites" Write-Host " unifi-cli list devices [--site <id>]" Write-Host " unifi-cli list clients [--site <id>] [--active]" Write-Host " unifi-cli list wlans [--site <id>] [--ssid <name>] [--show-password]" Write-Host " unifi-cli set wlan-password --ssid <name> [--site <id>]" Write-Host "" Write-Host "Native PS functions: Connect-UnifiController, Get-UnifiSite, etc." -ForegroundColor DarkGray Write-Host "" } } } |