Initial commit. Working and linked on PSGallery

This commit is contained in:
2026-05-15 08:53:21 +08:00
commit 7c77363885
17 changed files with 1109 additions and 0 deletions

118
Public/Invoke-UnifiCli.ps1 Normal file
View 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 ""
}
}
}