119 lines
4.6 KiB
PowerShell
119 lines
4.6 KiB
PowerShell
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 ""
|
|
}
|
|
}
|
|
}
|