Initial commit. Working and linked on PSGallery
This commit is contained in:
118
Public/Invoke-UnifiCli.ps1
Normal file
118
Public/Invoke-UnifiCli.ps1
Normal file
@@ -0,0 +1,118 @@
|
||||
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 ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user