# 設置顏色主題 $Theme = @{ Primary = 'Cyan' Success = 'Green' Warning = 'Yellow' Error = 'Red' Info = 'White' } # ASCII Logo $Logo = @" ██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╔════╝██║ ██║██╔══██╗██╔════╝██╔═══██╗██╔══██╗ ██╔══██╗██╔══██╗██╔═══██╗ ██║ ██║ ██║██████╔╝███████╗██║ ██║██████╔╝ ██████╔╝██████╔╝██║ ██║ ██║ ██║ ██║██╔══██╗╚════██║██║ ██║██╔══██╗ ██╔═══╝ ██╔══██╗██║ ██║ ╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║ ██║ ██║ ██║╚██████╔╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ "@ # 美化輸出函數 function Write-Styled { param ( [string]$Message, [string]$Color = $Theme.Info, [string]$Prefix = "", [switch]$NoNewline ) $symbol = switch ($Color) { $Theme.Success { "[OK]" } $Theme.Error { "[X]" } $Theme.Warning { "[!]" } default { "[*]" } } $output = if ($Prefix) { "$symbol $Prefix :: $Message" } else { "$symbol $Message" } if ($NoNewline) { Write-Host $output -ForegroundColor $Color -NoNewline } else { Write-Host $output -ForegroundColor $Color } } # 獲取版本號函數 function Get-LatestVersion { try { $latestRelease = Invoke-RestMethod -Uri "https://api.github.com/repos/yeongpin/cursor-free-vip/releases/latest" return @{ Version = $latestRelease.tag_name.TrimStart('v') Assets = $latestRelease.assets } } catch { Write-Styled $_.Exception.Message -Color $Theme.Error -Prefix "Error" throw "Cannot get latest version" } } # 顯示 Logo Write-Host $Logo -ForegroundColor $Theme.Primary $releaseInfo = Get-LatestVersion $version = $releaseInfo.Version Write-Host "Version $version" -ForegroundColor $Theme.Info Write-Host "Created by YeongPin`n" -ForegroundColor $Theme.Info # 設置 TLS 1.2 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # 主安裝函數 function Install-CursorFreeVIP { Write-Styled "Start downloading Cursor Free VIP" -Color $Theme.Primary -Prefix "Download" try { # 獲取最新版本 Write-Styled "Checking latest version..." -Color $Theme.Primary -Prefix "Update" $releaseInfo = Get-LatestVersion $version = $releaseInfo.Version Write-Styled "Found latest version: $version" -Color $Theme.Success -Prefix "Version" # 查找對應的資源 $asset = $releaseInfo.Assets | Where-Object { $_.name -eq "CursorFreeVIP_${version}_windows.exe" } if (!$asset) { Write-Styled "File not found: CursorFreeVIP_${version}_windows.exe" -Color $Theme.Error -Prefix "Error" Write-Styled "Available files:" -Color $Theme.Warning -Prefix "Info" $releaseInfo.Assets | ForEach-Object { Write-Styled "- $($_.name)" -Color $Theme.Info } throw "Cannot find target file" } # 下載到Downloads文件夾 $DownloadsPath = [Environment]::GetFolderPath("UserProfile") + "\Downloads" $downloadPath = Join-Path $DownloadsPath "CursorFreeVIP.exe" Write-Styled "Downloading to Downloads folder..." -Color $Theme.Primary -Prefix "Download" $webClient = New-Object System.Net.WebClient $webClient.Headers.Add("User-Agent", "PowerShell Script") $webClient.DownloadFile($asset.browser_download_url, $downloadPath) Write-Styled "Download completed!" -Color $Theme.Success -Prefix "Complete" Write-Styled "File location: $downloadPath" -Color $Theme.Info -Prefix "Location" Write-Styled "Starting program..." -Color $Theme.Primary -Prefix "Launch" # 運行程序 Start-Process $downloadPath } catch { Write-Styled $_.Exception.Message -Color $Theme.Error -Prefix "Error" throw } } # 執行安裝 try { Install-CursorFreeVIP } catch { Write-Styled "Download failed" -Color $Theme.Error -Prefix "Error" Write-Styled $_.Exception.Message -Color $Theme.Error } finally { Write-Host "`nPress any key to exit..." -ForegroundColor $Theme.Info $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') }