Public/Set-UnifiWlanPassword.ps1

function Set-UnifiWlanPassword {
    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory)]
        [string]$Ssid,

        [string]$Site,

        # If omitted, a SecureString prompt will appear
        [SecureString]$NewPassword
    )

    if (-not $script:UnifiSession) {
        Write-Error "Not connected. Run Connect-UnifiController first."
        return
    }

    $siteId = Resolve-UnifiSite $Site

    $result = Invoke-UnifiRequest -Endpoint '/rest/wlanconf' -Site $siteId
    $wlan   = $result.data | Where-Object { $_.name -eq $Ssid } | Select-Object -First 1

    if (-not $wlan) {
        Write-Warning "No WLAN named '$Ssid' found on site '$siteId'."
        return
    }

    if (-not $NewPassword) {
        $NewPassword = Read-Host -Prompt "New password for '$Ssid'" -AsSecureString
    }

    $plainText = ConvertFrom-SecureString -SecureString $NewPassword -AsPlainText

    if ($PSCmdlet.ShouldProcess("WLAN '$Ssid' on site '$siteId'", 'Set password')) {
        Invoke-UnifiRequest -Method PUT -Endpoint "/rest/wlanconf/$($wlan._id)" -Site $siteId -Body @{ x_passphrase = $plainText }
        Write-Host "Password updated for '$Ssid' on site '$siteId'." -ForegroundColor Green
    }
}