cursor-free-vip/reset.ps1
2025-01-13 11:33:06 +08:00

169 lines
6.4 KiB
PowerShell
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 檢查是否是通過權限提升啟動的
param(
[switch]$Elevated
)
# 設置顏色主題
$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
)
$emoji = switch ($Color) {
$Theme.Success { "" }
$Theme.Error { "" }
$Theme.Warning { "⚠️" }
default { "" }
}
$output = if ($Prefix) { "$emoji $Prefix :: $Message" } else { "$emoji $Message" }
if ($NoNewline) {
Write-Host $output -ForegroundColor $Color -NoNewline
} else {
Write-Host $output -ForegroundColor $Color
}
}
# 檢查管理員權限
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
if (-NOT $isAdmin) {
Write-Styled "需要管理員權限來運行重置工具" -Color $Theme.Warning -Prefix "權限"
Write-Styled "正在請求管理員權限..." -Color $Theme.Primary -Prefix "提升"
# 顯示操作選項
Write-Host "`n選擇操作:" -ForegroundColor $Theme.Primary
Write-Host "1. 請求管理員權限" -ForegroundColor $Theme.Info
Write-Host "2. 退出程序" -ForegroundColor $Theme.Info
$choice = Read-Host "`n請輸入選項 (1-2)"
if ($choice -ne "1") {
Write-Styled "操作已取消" -Color $Theme.Warning -Prefix "取消"
Write-Host "`n按任意鍵退出..." -ForegroundColor $Theme.Info
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
exit
}
try {
Start-Process powershell.exe -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" -Elevated"
exit
}
catch {
Write-Styled "無法獲取管理員權限" -Color $Theme.Error -Prefix "錯誤"
Write-Styled "請以管理員身份運行 PowerShell 後重試" -Color $Theme.Warning -Prefix "提示"
Write-Host "`n按任意鍵退出..." -ForegroundColor $Theme.Info
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
exit 1
}
}
# 如果是提升權限後的窗口,等待一下確保窗口可見
if ($Elevated) {
Start-Sleep -Seconds 1
}
# 獲取版本號函數
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 "錯誤"
throw "無法獲取最新版本信息"
}
}
# 顯示 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
# 創建臨時目錄
$TmpDir = Join-Path $env:TEMP ([System.Guid]::NewGuid().ToString())
New-Item -ItemType Directory -Path $TmpDir -Force | Out-Null
# 清理函數
function Cleanup {
if (Test-Path $TmpDir) {
Remove-Item -Recurse -Force $TmpDir -ErrorAction SilentlyContinue
}
}
# 主要執行函數
function Start-ResetTool {
Write-Styled "開始下載重置工具" -Color $Theme.Primary -Prefix "下載"
try {
# 獲取最新版本
Write-Styled "正在檢查最新版本..." -Color $Theme.Primary -Prefix "更新"
$releaseInfo = Get-LatestVersion
$version = $releaseInfo.Version
Write-Styled "找到最新版本: $version" -Color $Theme.Success -Prefix "版本"
# 查找對應的資源
$asset = $releaseInfo.Assets | Where-Object { $_.name -eq "reset_machine_manual.exe" }
if (!$asset) {
Write-Styled "找不到重置工具執行檔" -Color $Theme.Error -Prefix "錯誤"
throw "找不到對應的執行檔"
}
# 下載
Write-Styled "正在下載重置工具..." -Color $Theme.Primary -Prefix "下載"
$downloadPath = Join-Path $TmpDir "reset_machine_manual.exe"
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile $downloadPath
# 執行
Write-Styled "正在啟動重置工具..." -Color $Theme.Primary -Prefix "執行"
Start-Process -FilePath $downloadPath -Wait
Write-Styled "重置完成!" -Color $Theme.Success -Prefix "完成"
}
catch {
Write-Styled $_.Exception.Message -Color $Theme.Error -Prefix "錯誤"
throw
}
}
# 執行重置
try {
Start-ResetTool
}
catch {
Write-Styled "重置工具執行失敗" -Color $Theme.Error -Prefix "錯誤"
Write-Styled $_.Exception.Message -Color $Theme.Error
}
finally {
Cleanup
Write-Host "`n按任意鍵退出..." -ForegroundColor $Theme.Info
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
}