{"id":67,"date":"2025-07-21T16:02:12","date_gmt":"2025-07-21T08:02:12","guid":{"rendered":"https:\/\/www.lichengkun.com\/?p=67"},"modified":"2025-07-21T23:31:46","modified_gmt":"2025-07-21T15:31:46","slug":"cursor%e7%9a%84%e7%a5%9e%e7%a7%98%e8%84%9a%e6%9c%ac","status":"publish","type":"post","link":"https:\/\/www.lichengkun.com\/index.php\/2025\/07\/21\/cursor%e7%9a%84%e7%a5%9e%e7%a7%98%e8%84%9a%e6%9c%ac\/","title":{"rendered":"cursor\u7684\u795e\u79d8\u811a\u672c"},"content":{"rendered":"\n<p>\u4e8b\u5148\u58f0\u660e\u5237\u591a\u4e86\u4f1a\u5c01\uff0c\u522b\u602a\u6211\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/cursor.com\/cn\">Cursor &#8211; The AI Code Editor<\/a>\u524d\u5f80\u4e0b\u8f7dcursor\uff0c\u6ce8\u518c\u8d26\u53f7\u3002<\/p>\n\n\n\n<p>\u5f53\u4f60\u6bcf\u6708\u989d\u5ea6\u7528\u5149\u540e\uff0c\u53ef\u4ee5\u7528\u4e00\u4e0b\u64cd\u4f5c\u5237\u65b0\u989d\u5ea6<\/p>\n\n\n\n<p>1.\u5148\u6253\u5f00\u672c\u5730\u7684cursor\uff0c\u9000\u51fa\u8d26\u53f7\u3002<\/p>\n\n\n\n<p>2.\u6253\u5f00cursor\u7684\u5b98\u7f51\u627e\u5230setting,\u5220\u9664\u81ea\u5df1\u7684\u8d26\u53f7\u3002<\/p>\n\n\n\n<p>3.\u521b\u5efa\u6587\u672c\u6587\u4ef6\uff0c\u590d\u5236\u4e0b\u9762\u7684\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u8bbe\u7f6e\u8f93\u51fa\u7f16\u7801\u4e3a UTF-8\n$OutputEncoding = &#91;System.Text.Encoding]::UTF8\n&#91;Console]::OutputEncoding = &#91;System.Text.Encoding]::UTF8\n\n# \u989c\u8272\u5b9a\u4e49\n$RED = \"`e&#91;31m\"\n$GREEN = \"`e&#91;32m\"\n$YELLOW = \"`e&#91;33m\"\n$BLUE = \"`e&#91;34m\"\n$NC = \"`e&#91;0m\"\n\n# \u914d\u7f6e\u6587\u4ef6\u8def\u5f84\n$STORAGE_FILE = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n$BACKUP_DIR = \"$env:APPDATA\\Cursor\\User\\globalStorage\\backups\"\n\n# PowerShell\u539f\u751f\u65b9\u6cd5\u751f\u6210\u968f\u673a\u5b57\u7b26\u4e32\nfunction Generate-RandomString {\n    param(&#91;int]$Length)\n    $chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"\n    $result = \"\"\n    for ($i = 0; $i -lt $Length; $i++) {\n        $result += $chars&#91;(Get-Random -Maximum $chars.Length)]\n    }\n    return $result\n}\n\n# \u4fee\u6539Cursor\u5185\u6838JS\u6587\u4ef6\u5b9e\u73b0\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\uff08\u4ecemacOS\u7248\u672c\u79fb\u690d\uff09\nfunction Modify-CursorJSFiles {\n    Write-Host \"\"\n    Write-Host \"$BLUE\ud83d\udd27 &#91;\u5185\u6838\u4fee\u6539]$NC \u5f00\u59cb\u4fee\u6539Cursor\u5185\u6838JS\u6587\u4ef6\u5b9e\u73b0\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7...\"\n    Write-Host \"\"\n\n    # Windows\u7248Cursor\u5e94\u7528\u8def\u5f84\n    $cursorAppPath = \"${env:LOCALAPPDATA}\\Programs\\Cursor\"\n    if (-not (Test-Path $cursorAppPath)) {\n        # \u5c1d\u8bd5\u5176\u4ed6\u53ef\u80fd\u7684\u5b89\u88c5\u8def\u5f84\n        $alternatePaths = @(\n            \"${env:ProgramFiles}\\Cursor\",\n            \"${env:ProgramFiles(x86)}\\Cursor\",\n            \"${env:USERPROFILE}\\AppData\\Local\\Programs\\Cursor\"\n        )\n\n        foreach ($path in $alternatePaths) {\n            if (Test-Path $path) {\n                $cursorAppPath = $path\n                break\n            }\n        }\n\n        if (-not (Test-Path $cursorAppPath)) {\n            Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u672a\u627e\u5230Cursor\u5e94\u7528\u5b89\u88c5\u8def\u5f84\"\n            Write-Host \"$YELLOW\ud83d\udca1 &#91;\u63d0\u793a]$NC \u8bf7\u786e\u8ba4Cursor\u5df2\u6b63\u786e\u5b89\u88c5\"\n            return $false\n        }\n    }\n\n    Write-Host \"$GREEN\u2705 &#91;\u53d1\u73b0]$NC \u627e\u5230Cursor\u5b89\u88c5\u8def\u5f84: $cursorAppPath\"\n\n    # \u751f\u6210\u65b0\u7684\u8bbe\u5907\u6807\u8bc6\u7b26\n    $newUuid = &#91;System.Guid]::NewGuid().ToString().ToLower()\n    $machineId = \"auth0|user_$(Generate-RandomString -Length 32)\"\n    $deviceId = &#91;System.Guid]::NewGuid().ToString().ToLower()\n    $macMachineId = Generate-RandomString -Length 64\n\n    Write-Host \"$GREEN\ud83d\udd11 &#91;\u751f\u6210]$NC \u5df2\u751f\u6210\u65b0\u7684\u8bbe\u5907\u6807\u8bc6\u7b26\"\n\n    # \u76ee\u6807JS\u6587\u4ef6\u5217\u8868\uff08Windows\u8def\u5f84\uff09\n    $jsFiles = @(\n        \"$cursorAppPath\\resources\\app\\out\\vs\\workbench\\api\\node\\extensionHostProcess.js\",\n        \"$cursorAppPath\\resources\\app\\out\\main.js\",\n        \"$cursorAppPath\\resources\\app\\out\\vs\\code\\node\\cliProcessMain.js\"\n    )\n\n    $modifiedCount = 0\n    $needModification = $false\n\n    # \u68c0\u67e5\u662f\u5426\u9700\u8981\u4fee\u6539\n    Write-Host \"$BLUE\ud83d\udd0d &#91;\u68c0\u67e5]$NC \u68c0\u67e5JS\u6587\u4ef6\u4fee\u6539\u72b6\u6001...\"\n    foreach ($file in $jsFiles) {\n        if (-not (Test-Path $file)) {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u6587\u4ef6\u4e0d\u5b58\u5728: $(Split-Path $file -Leaf)\"\n            continue\n        }\n\n        $content = Get-Content $file -Raw -ErrorAction SilentlyContinue\n        if ($content -and $content -notmatch \"return crypto\\.randomUUID\\(\\)\") {\n            Write-Host \"$BLUE\ud83d\udcdd &#91;\u9700\u8981]$NC \u6587\u4ef6\u9700\u8981\u4fee\u6539: $(Split-Path $file -Leaf)\"\n            $needModification = $true\n            break\n        } else {\n            Write-Host \"$GREEN\u2705 &#91;\u5df2\u4fee\u6539]$NC \u6587\u4ef6\u5df2\u4fee\u6539: $(Split-Path $file -Leaf)\"\n        }\n    }\n\n    if (-not $needModification) {\n        Write-Host \"$GREEN\u2705 &#91;\u8df3\u8fc7]$NC \u6240\u6709JS\u6587\u4ef6\u5df2\u7ecf\u88ab\u4fee\u6539\u8fc7\uff0c\u65e0\u9700\u91cd\u590d\u64cd\u4f5c\"\n        return $true\n    }\n\n    # \u5173\u95edCursor\u8fdb\u7a0b\n    Write-Host \"$BLUE\ud83d\udd04 &#91;\u5173\u95ed]$NC \u5173\u95edCursor\u8fdb\u7a0b\u4ee5\u8fdb\u884c\u6587\u4ef6\u4fee\u6539...\"\n    Stop-AllCursorProcesses -MaxRetries 3 -WaitSeconds 3 | Out-Null\n\n    # \u521b\u5efa\u5907\u4efd\n    $timestamp = Get-Date -Format \"yyyyMMdd_HHmmss\"\n    $backupPath = \"$env:TEMP\\Cursor_JS_Backup_$timestamp\"\n\n    Write-Host \"$BLUE\ud83d\udcbe &#91;\u5907\u4efd]$NC \u521b\u5efaCursor JS\u6587\u4ef6\u5907\u4efd...\"\n    try {\n        New-Item -ItemType Directory -Path $backupPath -Force | Out-Null\n        foreach ($file in $jsFiles) {\n            if (Test-Path $file) {\n                $fileName = Split-Path $file -Leaf\n                Copy-Item $file \"$backupPath\\$fileName\" -Force\n            }\n        }\n        Write-Host \"$GREEN\u2705 &#91;\u5907\u4efd]$NC \u5907\u4efd\u521b\u5efa\u6210\u529f: $backupPath\"\n    } catch {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u521b\u5efa\u5907\u4efd\u5931\u8d25: $($_.Exception.Message)\"\n        return $false\n    }\n\n    # \u4fee\u6539JS\u6587\u4ef6\n    Write-Host \"$BLUE\ud83d\udd27 &#91;\u4fee\u6539]$NC \u5f00\u59cb\u4fee\u6539JS\u6587\u4ef6...\"\n\n    foreach ($file in $jsFiles) {\n        if (-not (Test-Path $file)) {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8df3\u8fc7]$NC \u6587\u4ef6\u4e0d\u5b58\u5728: $(Split-Path $file -Leaf)\"\n            continue\n        }\n\n        Write-Host \"$BLUE\ud83d\udcdd &#91;\u5904\u7406]$NC \u6b63\u5728\u5904\u7406: $(Split-Path $file -Leaf)\"\n\n        try {\n            $content = Get-Content $file -Raw -Encoding UTF8\n\n            # \u68c0\u67e5\u662f\u5426\u5df2\u7ecf\u4fee\u6539\u8fc7\n            if ($content -match \"return crypto\\.randomUUID\\(\\)\" -or $content -match \"\/\/ Cursor ID \u4fee\u6539\u5de5\u5177\u6ce8\u5165\") {\n                Write-Host \"$GREEN\u2705 &#91;\u8df3\u8fc7]$NC \u6587\u4ef6\u5df2\u7ecf\u88ab\u4fee\u6539\u8fc7\"\n                $modifiedCount++\n                continue\n            }\n\n            # ES\u6a21\u5757\u517c\u5bb9\u7684JavaScript\u6ce8\u5165\u4ee3\u7801\n            $timestampVar = &#91;DateTimeOffset]::Now.ToUnixTimeSeconds()\n            $injectCode = @\"\n\/\/ Cursor ID \u4fee\u6539\u5de5\u5177\u6ce8\u5165 - $(Get-Date) - ES\u6a21\u5757\u517c\u5bb9\u7248\u672c\nimport crypto from 'crypto';\n\n\/\/ \u4fdd\u5b58\u539f\u59cb\u51fd\u6570\u5f15\u7528\nconst originalRandomUUID_${timestampVar} = crypto.randomUUID;\n\n\/\/ \u91cd\u5199crypto.randomUUID\u65b9\u6cd5\ncrypto.randomUUID = function() {\n    return '${newUuid}';\n};\n\n\/\/ \u8986\u76d6\u6240\u6709\u53ef\u80fd\u7684\u7cfb\u7edfID\u83b7\u53d6\u51fd\u6570 - ES\u6a21\u5757\u517c\u5bb9\u7248\u672c\nglobalThis.getMachineId = function() { return '${machineId}'; };\nglobalThis.getDeviceId = function() { return '${deviceId}'; };\nglobalThis.macMachineId = '${macMachineId}';\n\n\/\/ \u786e\u4fdd\u5728\u4e0d\u540c\u73af\u5883\u4e0b\u90fd\u80fd\u8bbf\u95ee\nif (typeof window !== 'undefined') {\n    window.getMachineId = globalThis.getMachineId;\n    window.getDeviceId = globalThis.getDeviceId;\n    window.macMachineId = globalThis.macMachineId;\n}\n\n\/\/ \u786e\u4fdd\u6a21\u5757\u9876\u5c42\u6267\u884c\nconsole.log('Cursor\u8bbe\u5907\u6807\u8bc6\u7b26\u5df2\u6210\u529f\u52ab\u6301 - ES\u6a21\u5757\u7248\u672c \u714e\u997c\u679c\u5b50(86) \u5173\u6ce8\u516c\u4f17\u53f7\u3010\u714e\u997c\u679c\u5b50\u5377AI\u3011\u4e00\u8d77\u4ea4\u6d41\u66f4\u591aCursor\u6280\u5de7\u548cAI\u77e5\u8bc6(\u811a\u672c\u514d\u8d39\u3001\u5173\u6ce8\u516c\u4f17\u53f7\u52a0\u7fa4\u6709\u66f4\u591a\u6280\u5de7\u548c\u5927\u4f6c)');\n\n\"@\n\n            # \u65b9\u6cd51: \u67e5\u627eIOPlatformUUID\u76f8\u5173\u51fd\u6570\n            if ($content -match \"IOPlatformUUID\") {\n                Write-Host \"$BLUE\ud83d\udd0d &#91;\u53d1\u73b0]$NC \u627e\u5230IOPlatformUUID\u5173\u952e\u5b57\"\n\n                # \u9488\u5bf9\u4e0d\u540c\u7684\u51fd\u6570\u6a21\u5f0f\u8fdb\u884c\u4fee\u6539\n                if ($content -match \"function a\\$\") {\n                    $content = $content -replace \"function a\\$\\(t\\)\\{switch\", \"function a`$(t){return crypto.randomUUID(); switch\"\n                    Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u4fee\u6539a`$\u51fd\u6570\u6210\u529f\"\n                    $modifiedCount++\n                    continue\n                }\n\n                # \u901a\u7528\u6ce8\u5165\u65b9\u6cd5\n                $content = $injectCode + $content\n                Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u901a\u7528\u6ce8\u5165\u65b9\u6cd5\u4fee\u6539\u6210\u529f\"\n                $modifiedCount++\n            }\n            # \u65b9\u6cd52: \u67e5\u627e\u5176\u4ed6\u8bbe\u5907ID\u76f8\u5173\u51fd\u6570\n            elseif ($content -match \"function t\\$\\(\\)\" -or $content -match \"async function y5\") {\n                Write-Host \"$BLUE\ud83d\udd0d &#91;\u53d1\u73b0]$NC \u627e\u5230\u8bbe\u5907ID\u76f8\u5173\u51fd\u6570\"\n\n                # \u4fee\u6539MAC\u5730\u5740\u83b7\u53d6\u51fd\u6570\n                if ($content -match \"function t\\$\\(\\)\") {\n                    $content = $content -replace \"function t\\$\\(\\)\\{\", \"function t`$(){return `\"00:00:00:00:00:00`\";\"\n                    Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u4fee\u6539MAC\u5730\u5740\u83b7\u53d6\u51fd\u6570\"\n                }\n\n                # \u4fee\u6539\u8bbe\u5907ID\u83b7\u53d6\u51fd\u6570\n                if ($content -match \"async function y5\") {\n                    $content = $content -replace \"async function y5\\(t\\)\\{\", \"async function y5(t){return crypto.randomUUID();\"\n                    Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u4fee\u6539\u8bbe\u5907ID\u83b7\u53d6\u51fd\u6570\"\n                }\n\n                $modifiedCount++\n            }\n            else {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u672a\u627e\u5230\u5df2\u77e5\u7684\u8bbe\u5907ID\u51fd\u6570\u6a21\u5f0f\uff0c\u4f7f\u7528\u901a\u7528\u6ce8\u5165\"\n                $content = $injectCode + $content\n                $modifiedCount++\n            }\n\n            # \u5199\u5165\u4fee\u6539\u540e\u7684\u5185\u5bb9\n            Set-Content -Path $file -Value $content -Encoding UTF8 -NoNewline\n            Write-Host \"$GREEN\u2705 &#91;\u5b8c\u6210]$NC \u6587\u4ef6\u4fee\u6539\u5b8c\u6210: $(Split-Path $file -Leaf)\"\n\n        } catch {\n            Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u4fee\u6539\u6587\u4ef6\u5931\u8d25: $($_.Exception.Message)\"\n            # \u5c1d\u8bd5\u4ece\u5907\u4efd\u6062\u590d\n            $fileName = Split-Path $file -Leaf\n            $backupFile = \"$backupPath\\$fileName\"\n            if (Test-Path $backupFile) {\n                Copy-Item $backupFile $file -Force\n                Write-Host \"$YELLOW\ud83d\udd04 &#91;\u6062\u590d]$NC \u5df2\u4ece\u5907\u4efd\u6062\u590d\u6587\u4ef6\"\n            }\n        }\n    }\n\n    if ($modifiedCount -gt 0) {\n        Write-Host \"\"\n        Write-Host \"$GREEN\ud83c\udf89 &#91;\u5b8c\u6210]$NC \u6210\u529f\u4fee\u6539 $modifiedCount \u4e2aJS\u6587\u4ef6\"\n        Write-Host \"$BLUE\ud83d\udcbe &#91;\u5907\u4efd]$NC \u539f\u59cb\u6587\u4ef6\u5907\u4efd\u4f4d\u7f6e: $backupPath\"\n        Write-Host \"$BLUE\ud83d\udca1 &#91;\u8bf4\u660e]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u5df2\u542f\u7528\uff0c\u5b9e\u73b0\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\"\n        return $true\n    } else {\n        Write-Host \"$RED\u274c &#91;\u5931\u8d25]$NC \u6ca1\u6709\u6210\u529f\u4fee\u6539\u4efb\u4f55\u6587\u4ef6\"\n        return $false\n    }\n}\n\n\n# \ud83d\ude80 \u65b0\u589e Cursor \u9632\u6389\u8bd5\u7528Pro\u5220\u9664\u6587\u4ef6\u5939\u529f\u80fd\nfunction Remove-CursorTrialFolders {\n    Write-Host \"\"\n    Write-Host \"$GREEN\ud83c\udfaf &#91;\u6838\u5fc3\u529f\u80fd]$NC \u6b63\u5728\u6267\u884c Cursor \u9632\u6389\u8bd5\u7528Pro\u5220\u9664\u6587\u4ef6\u5939...\"\n    Write-Host \"$BLUE\ud83d\udccb &#91;\u8bf4\u660e]$NC \u6b64\u529f\u80fd\u5c06\u5220\u9664\u6307\u5b9a\u7684Cursor\u76f8\u5173\u6587\u4ef6\u5939\u4ee5\u91cd\u7f6e\u8bd5\u7528\u72b6\u6001\"\n    Write-Host \"\"\n\n    # \u5b9a\u4e49\u9700\u8981\u5220\u9664\u7684\u6587\u4ef6\u5939\u8def\u5f84\n    $foldersToDelete = @()\n\n    # Windows Administrator \u7528\u6237\u8def\u5f84\n    $adminPaths = @(\n        \"C:\\Users\\Administrator\\.cursor\",\n        \"C:\\Users\\Administrator\\AppData\\Roaming\\Cursor\"\n    )\n\n    # \u5f53\u524d\u7528\u6237\u8def\u5f84\n    $currentUserPaths = @(\n        \"$env:USERPROFILE\\.cursor\",\n        \"$env:APPDATA\\Cursor\"\n    )\n\n    # \u5408\u5e76\u6240\u6709\u8def\u5f84\n    $foldersToDelete += $adminPaths\n    $foldersToDelete += $currentUserPaths\n\n    Write-Host \"$BLUE\ud83d\udcc2 &#91;\u68c0\u6d4b]$NC \u5c06\u68c0\u67e5\u4ee5\u4e0b\u6587\u4ef6\u5939\uff1a\"\n    foreach ($folder in $foldersToDelete) {\n        Write-Host \"   \ud83d\udcc1 $folder\"\n    }\n    Write-Host \"\"\n\n    $deletedCount = 0\n    $skippedCount = 0\n    $errorCount = 0\n\n    # \u5220\u9664\u6307\u5b9a\u6587\u4ef6\u5939\n    foreach ($folder in $foldersToDelete) {\n        Write-Host \"$BLUE\ud83d\udd0d &#91;\u68c0\u67e5]$NC \u68c0\u67e5\u6587\u4ef6\u5939: $folder\"\n\n        if (Test-Path $folder) {\n            try {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u53d1\u73b0\u6587\u4ef6\u5939\u5b58\u5728\uff0c\u6b63\u5728\u5220\u9664...\"\n                Remove-Item -Path $folder -Recurse -Force -ErrorAction Stop\n                Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u5df2\u5220\u9664\u6587\u4ef6\u5939: $folder\"\n                $deletedCount++\n            }\n            catch {\n                Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u5220\u9664\u6587\u4ef6\u5939\u5931\u8d25: $folder\"\n                Write-Host \"$RED\ud83d\udca5 &#91;\u8be6\u60c5]$NC \u9519\u8bef\u4fe1\u606f: $($_.Exception.Message)\"\n                $errorCount++\n            }\n        } else {\n            Write-Host \"$YELLOW\u23ed\ufe0f  &#91;\u8df3\u8fc7]$NC \u6587\u4ef6\u5939\u4e0d\u5b58\u5728: $folder\"\n            $skippedCount++\n        }\n        Write-Host \"\"\n    }\n\n    # \u663e\u793a\u64cd\u4f5c\u7edf\u8ba1\n    Write-Host \"$GREEN\ud83d\udcca &#91;\u7edf\u8ba1]$NC \u64cd\u4f5c\u5b8c\u6210\u7edf\u8ba1\uff1a\"\n    Write-Host \"   \u2705 \u6210\u529f\u5220\u9664: $deletedCount \u4e2a\u6587\u4ef6\u5939\"\n    Write-Host \"   \u23ed\ufe0f  \u8df3\u8fc7\u5904\u7406: $skippedCount \u4e2a\u6587\u4ef6\u5939\"\n    Write-Host \"   \u274c \u5220\u9664\u5931\u8d25: $errorCount \u4e2a\u6587\u4ef6\u5939\"\n    Write-Host \"\"\n\n    if ($deletedCount -gt 0) {\n        Write-Host \"$GREEN\ud83c\udf89 &#91;\u5b8c\u6210]$NC Cursor \u9632\u6389\u8bd5\u7528Pro\u6587\u4ef6\u5939\u5220\u9664\u5b8c\u6210\uff01\"\n\n        # \ud83d\udd27 \u9884\u521b\u5efa\u5fc5\u8981\u7684\u76ee\u5f55\u7ed3\u6784\uff0c\u907f\u514d\u6743\u9650\u95ee\u9898\n        Write-Host \"$BLUE\ud83d\udd27 &#91;\u4fee\u590d]$NC \u9884\u521b\u5efa\u5fc5\u8981\u7684\u76ee\u5f55\u7ed3\u6784\u4ee5\u907f\u514d\u6743\u9650\u95ee\u9898...\"\n\n        $cursorAppData = \"$env:APPDATA\\Cursor\"\n        $cursorLocalAppData = \"$env:LOCALAPPDATA\\cursor\"\n        $cursorUserProfile = \"$env:USERPROFILE\\.cursor\"\n\n        # \u521b\u5efa\u4e3b\u8981\u76ee\u5f55\n        try {\n            if (-not (Test-Path $cursorAppData)) {\n                New-Item -ItemType Directory -Path $cursorAppData -Force | Out-Null\n            }\n            if (-not (Test-Path $cursorUserProfile)) {\n                New-Item -ItemType Directory -Path $cursorUserProfile -Force | Out-Null\n            }\n            Write-Host \"$GREEN\u2705 &#91;\u5b8c\u6210]$NC \u76ee\u5f55\u7ed3\u6784\u9884\u521b\u5efa\u5b8c\u6210\"\n        } catch {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u9884\u521b\u5efa\u76ee\u5f55\u65f6\u51fa\u73b0\u95ee\u9898: $($_.Exception.Message)\"\n        }\n    } else {\n        Write-Host \"$YELLOW\ud83e\udd14 &#91;\u63d0\u793a]$NC \u672a\u627e\u5230\u9700\u8981\u5220\u9664\u7684\u6587\u4ef6\u5939\uff0c\u53ef\u80fd\u5df2\u7ecf\u6e05\u7406\u8fc7\u4e86\"\n    }\n    Write-Host \"\"\n}\n\n# \ud83d\udd04 \u91cd\u542fCursor\u5e76\u7b49\u5f85\u914d\u7f6e\u6587\u4ef6\u751f\u6210\nfunction Restart-CursorAndWait {\n    Write-Host \"\"\n    Write-Host \"$GREEN\ud83d\udd04 &#91;\u91cd\u542f]$NC \u6b63\u5728\u91cd\u542fCursor\u4ee5\u91cd\u65b0\u751f\u6210\u914d\u7f6e\u6587\u4ef6...\"\n\n    if (-not $global:CursorProcessInfo) {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u672a\u627e\u5230Cursor\u8fdb\u7a0b\u4fe1\u606f\uff0c\u65e0\u6cd5\u91cd\u542f\"\n        return $false\n    }\n\n    $cursorPath = $global:CursorProcessInfo.Path\n\n    # \u4fee\u590d\uff1a\u786e\u4fdd\u8def\u5f84\u662f\u5b57\u7b26\u4e32\u7c7b\u578b\n    if ($cursorPath -is &#91;array]) {\n        $cursorPath = $cursorPath&#91;0]\n    }\n\n    # \u9a8c\u8bc1\u8def\u5f84\u4e0d\u4e3a\u7a7a\n    if (&#91;string]::IsNullOrEmpty($cursorPath)) {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC Cursor\u8def\u5f84\u4e3a\u7a7a\"\n        return $false\n    }\n\n    Write-Host \"$BLUE\ud83d\udccd &#91;\u8def\u5f84]$NC \u4f7f\u7528\u8def\u5f84: $cursorPath\"\n\n    if (-not (Test-Path $cursorPath)) {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC Cursor\u53ef\u6267\u884c\u6587\u4ef6\u4e0d\u5b58\u5728: $cursorPath\"\n\n        # \u5c1d\u8bd5\u4f7f\u7528\u5907\u7528\u8def\u5f84\n        $backupPaths = @(\n            \"$env:LOCALAPPDATA\\Programs\\cursor\\Cursor.exe\",\n            \"$env:PROGRAMFILES\\Cursor\\Cursor.exe\",\n            \"$env:PROGRAMFILES(X86)\\Cursor\\Cursor.exe\"\n        )\n\n        $foundPath = $null\n        foreach ($backupPath in $backupPaths) {\n            if (Test-Path $backupPath) {\n                $foundPath = $backupPath\n                Write-Host \"$GREEN\ud83d\udca1 &#91;\u53d1\u73b0]$NC \u4f7f\u7528\u5907\u7528\u8def\u5f84: $foundPath\"\n                break\n            }\n        }\n\n        if (-not $foundPath) {\n            Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u65e0\u6cd5\u627e\u5230\u6709\u6548\u7684Cursor\u53ef\u6267\u884c\u6587\u4ef6\"\n            return $false\n        }\n\n        $cursorPath = $foundPath\n    }\n\n    try {\n        Write-Host \"$GREEN\ud83d\ude80 &#91;\u542f\u52a8]$NC \u6b63\u5728\u542f\u52a8Cursor...\"\n        $process = Start-Process -FilePath $cursorPath -PassThru -WindowStyle Hidden\n\n        Write-Host \"$YELLOW\u23f3 &#91;\u7b49\u5f85]$NC \u7b49\u5f8520\u79d2\u8ba9Cursor\u5b8c\u5168\u542f\u52a8\u5e76\u751f\u6210\u914d\u7f6e\u6587\u4ef6...\"\n        Start-Sleep -Seconds 20\n\n        # \u68c0\u67e5\u914d\u7f6e\u6587\u4ef6\u662f\u5426\u751f\u6210\n        $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n        $maxWait = 45\n        $waited = 0\n\n        while (-not (Test-Path $configPath) -and $waited -lt $maxWait) {\n            Write-Host \"$YELLOW\u23f3 &#91;\u7b49\u5f85]$NC \u7b49\u5f85\u914d\u7f6e\u6587\u4ef6\u751f\u6210... ($waited\/$maxWait \u79d2)\"\n            Start-Sleep -Seconds 1\n            $waited++\n        }\n\n        if (Test-Path $configPath) {\n            Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u914d\u7f6e\u6587\u4ef6\u5df2\u751f\u6210: $configPath\"\n\n            # \u989d\u5916\u7b49\u5f85\u786e\u4fdd\u6587\u4ef6\u5b8c\u5168\u5199\u5165\n            Write-Host \"$YELLOW\u23f3 &#91;\u7b49\u5f85]$NC \u7b49\u5f855\u79d2\u786e\u4fdd\u914d\u7f6e\u6587\u4ef6\u5b8c\u5168\u5199\u5165...\"\n            Start-Sleep -Seconds 5\n        } else {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u914d\u7f6e\u6587\u4ef6\u672a\u5728\u9884\u671f\u65f6\u95f4\u5185\u751f\u6210\"\n            Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u53ef\u80fd\u9700\u8981\u624b\u52a8\u542f\u52a8Cursor\u4e00\u6b21\u6765\u751f\u6210\u914d\u7f6e\u6587\u4ef6\"\n        }\n\n        # \u5f3a\u5236\u5173\u95edCursor\n        Write-Host \"$YELLOW\ud83d\udd04 &#91;\u5173\u95ed]$NC \u6b63\u5728\u5173\u95edCursor\u4ee5\u8fdb\u884c\u914d\u7f6e\u4fee\u6539...\"\n        if ($process -and -not $process.HasExited) {\n            $process.Kill()\n            $process.WaitForExit(5000)\n        }\n\n        # \u786e\u4fdd\u6240\u6709Cursor\u8fdb\u7a0b\u90fd\u5173\u95ed\n        Get-Process -Name \"Cursor\" -ErrorAction SilentlyContinue | Stop-Process -Force\n        Get-Process -Name \"cursor\" -ErrorAction SilentlyContinue | Stop-Process -Force\n\n        Write-Host \"$GREEN\u2705 &#91;\u5b8c\u6210]$NC Cursor\u91cd\u542f\u6d41\u7a0b\u5b8c\u6210\"\n        return $true\n\n    } catch {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u91cd\u542fCursor\u5931\u8d25: $($_.Exception.Message)\"\n        Write-Host \"$BLUE\ud83d\udca1 &#91;\u8c03\u8bd5]$NC \u9519\u8bef\u8be6\u60c5: $($_.Exception.GetType().FullName)\"\n        return $false\n    }\n}\n\n# \ud83d\udd12 \u5f3a\u5236\u5173\u95ed\u6240\u6709Cursor\u8fdb\u7a0b\uff08\u589e\u5f3a\u7248\uff09\nfunction Stop-AllCursorProcesses {\n    param(\n        &#91;int]$MaxRetries = 3,\n        &#91;int]$WaitSeconds = 5\n    )\n\n    Write-Host \"$BLUE\ud83d\udd12 &#91;\u8fdb\u7a0b\u68c0\u67e5]$NC \u6b63\u5728\u68c0\u67e5\u5e76\u5173\u95ed\u6240\u6709Cursor\u76f8\u5173\u8fdb\u7a0b...\"\n\n    # \u5b9a\u4e49\u6240\u6709\u53ef\u80fd\u7684Cursor\u8fdb\u7a0b\u540d\u79f0\n    $cursorProcessNames = @(\n        \"Cursor\",\n        \"cursor\",\n        \"Cursor Helper\",\n        \"Cursor Helper (GPU)\",\n        \"Cursor Helper (Plugin)\",\n        \"Cursor Helper (Renderer)\",\n        \"CursorUpdater\"\n    )\n\n    for ($retry = 1; $retry -le $MaxRetries; $retry++) {\n        Write-Host \"$BLUE\ud83d\udd0d &#91;\u68c0\u67e5]$NC \u7b2c $retry\/$MaxRetries \u6b21\u8fdb\u7a0b\u68c0\u67e5...\"\n\n        $foundProcesses = @()\n        foreach ($processName in $cursorProcessNames) {\n            $processes = Get-Process -Name $processName -ErrorAction SilentlyContinue\n            if ($processes) {\n                $foundProcesses += $processes\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u53d1\u73b0]$NC \u8fdb\u7a0b: $processName (PID: $($processes.Id -join ', '))\"\n            }\n        }\n\n        if ($foundProcesses.Count -eq 0) {\n            Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u6240\u6709Cursor\u8fdb\u7a0b\u5df2\u5173\u95ed\"\n            return $true\n        }\n\n        Write-Host \"$YELLOW\ud83d\udd04 &#91;\u5173\u95ed]$NC \u6b63\u5728\u5173\u95ed $($foundProcesses.Count) \u4e2aCursor\u8fdb\u7a0b...\"\n\n        # \u5148\u5c1d\u8bd5\u4f18\u96c5\u5173\u95ed\n        foreach ($process in $foundProcesses) {\n            try {\n                $process.CloseMainWindow() | Out-Null\n                Write-Host \"$BLUE  \u2022 \u4f18\u96c5\u5173\u95ed: $($process.ProcessName) (PID: $($process.Id))$NC\"\n            } catch {\n                Write-Host \"$YELLOW  \u2022 \u4f18\u96c5\u5173\u95ed\u5931\u8d25: $($process.ProcessName)$NC\"\n            }\n        }\n\n        Start-Sleep -Seconds 3\n\n        # \u5f3a\u5236\u7ec8\u6b62\u4ecd\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\n        foreach ($processName in $cursorProcessNames) {\n            $processes = Get-Process -Name $processName -ErrorAction SilentlyContinue\n            if ($processes) {\n                foreach ($process in $processes) {\n                    try {\n                        Stop-Process -Id $process.Id -Force\n                        Write-Host \"$RED  \u2022 \u5f3a\u5236\u7ec8\u6b62: $($process.ProcessName) (PID: $($process.Id))$NC\"\n                    } catch {\n                        Write-Host \"$RED  \u2022 \u5f3a\u5236\u7ec8\u6b62\u5931\u8d25: $($process.ProcessName)$NC\"\n                    }\n                }\n            }\n        }\n\n        if ($retry -lt $MaxRetries) {\n            Write-Host \"$YELLOW\u23f3 &#91;\u7b49\u5f85]$NC \u7b49\u5f85 $WaitSeconds \u79d2\u540e\u91cd\u65b0\u68c0\u67e5...\"\n            Start-Sleep -Seconds $WaitSeconds\n        }\n    }\n\n    Write-Host \"$RED\u274c &#91;\u5931\u8d25]$NC \u7ecf\u8fc7 $MaxRetries \u6b21\u5c1d\u8bd5\u4ecd\u6709Cursor\u8fdb\u7a0b\u5728\u8fd0\u884c\"\n    return $false\n}\n\n# \ud83d\udd10 \u68c0\u67e5\u6587\u4ef6\u6743\u9650\u548c\u9501\u5b9a\u72b6\u6001\nfunction Test-FileAccessibility {\n    param(\n        &#91;string]$FilePath\n    )\n\n    Write-Host \"$BLUE\ud83d\udd10 &#91;\u6743\u9650\u68c0\u67e5]$NC \u68c0\u67e5\u6587\u4ef6\u8bbf\u95ee\u6743\u9650: $(Split-Path $FilePath -Leaf)\"\n\n    if (-not (Test-Path $FilePath)) {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u6587\u4ef6\u4e0d\u5b58\u5728\"\n        return $false\n    }\n\n    # \u68c0\u67e5\u6587\u4ef6\u662f\u5426\u88ab\u9501\u5b9a\n    try {\n        $fileStream = &#91;System.IO.File]::Open($FilePath, 'Open', 'ReadWrite', 'None')\n        $fileStream.Close()\n        Write-Host \"$GREEN\u2705 &#91;\u6743\u9650]$NC \u6587\u4ef6\u53ef\u8bfb\u5199\uff0c\u65e0\u9501\u5b9a\"\n        return $true\n    } catch &#91;System.IO.IOException] {\n        Write-Host \"$RED\u274c &#91;\u9501\u5b9a]$NC \u6587\u4ef6\u88ab\u5176\u4ed6\u8fdb\u7a0b\u9501\u5b9a: $($_.Exception.Message)\"\n        return $false\n    } catch &#91;System.UnauthorizedAccessException] {\n        Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u6743\u9650]$NC \u6587\u4ef6\u6743\u9650\u53d7\u9650\uff0c\u5c1d\u8bd5\u4fee\u6539\u6743\u9650...\"\n\n        # \u5c1d\u8bd5\u4fee\u6539\u6587\u4ef6\u6743\u9650\n        try {\n            $file = Get-Item $FilePath\n            if ($file.IsReadOnly) {\n                $file.IsReadOnly = $false\n                Write-Host \"$GREEN\u2705 &#91;\u4fee\u590d]$NC \u5df2\u79fb\u9664\u53ea\u8bfb\u5c5e\u6027\"\n            }\n\n            # \u518d\u6b21\u6d4b\u8bd5\n            $fileStream = &#91;System.IO.File]::Open($FilePath, 'Open', 'ReadWrite', 'None')\n            $fileStream.Close()\n            Write-Host \"$GREEN\u2705 &#91;\u6743\u9650]$NC \u6743\u9650\u4fee\u590d\u6210\u529f\"\n            return $true\n        } catch {\n            Write-Host \"$RED\u274c &#91;\u6743\u9650]$NC \u65e0\u6cd5\u4fee\u590d\u6743\u9650: $($_.Exception.Message)\"\n            return $false\n        }\n    } catch {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u672a\u77e5\u9519\u8bef: $($_.Exception.Message)\"\n        return $false\n    }\n}\n\n# \ud83e\uddf9 Cursor \u521d\u59cb\u5316\u6e05\u7406\u529f\u80fd\uff08\u4ece\u65e7\u7248\u672c\u79fb\u690d\uff09\nfunction Invoke-CursorInitialization {\n    Write-Host \"\"\n    Write-Host \"$GREEN\ud83e\uddf9 &#91;\u521d\u59cb\u5316]$NC \u6b63\u5728\u6267\u884c Cursor \u521d\u59cb\u5316\u6e05\u7406...\"\n    $BASE_PATH = \"$env:APPDATA\\Cursor\\User\"\n\n    $filesToDelete = @(\n        (Join-Path -Path $BASE_PATH -ChildPath \"globalStorage\\state.vscdb\"),\n        (Join-Path -Path $BASE_PATH -ChildPath \"globalStorage\\state.vscdb.backup\")\n    )\n\n    $folderToCleanContents = Join-Path -Path $BASE_PATH -ChildPath \"History\"\n    $folderToDeleteCompletely = Join-Path -Path $BASE_PATH -ChildPath \"workspaceStorage\"\n\n    Write-Host \"$BLUE\ud83d\udd0d &#91;\u8c03\u8bd5]$NC \u57fa\u7840\u8def\u5f84: $BASE_PATH\"\n\n    # \u5220\u9664\u6307\u5b9a\u6587\u4ef6\n    foreach ($file in $filesToDelete) {\n        Write-Host \"$BLUE\ud83d\udd0d &#91;\u68c0\u67e5]$NC \u68c0\u67e5\u6587\u4ef6: $file\"\n        if (Test-Path $file) {\n            try {\n                Remove-Item -Path $file -Force -ErrorAction Stop\n                Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u5df2\u5220\u9664\u6587\u4ef6: $file\"\n            }\n            catch {\n                Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u5220\u9664\u6587\u4ef6 $file \u5931\u8d25: $($_.Exception.Message)\"\n            }\n        } else {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8df3\u8fc7]$NC \u6587\u4ef6\u4e0d\u5b58\u5728\uff0c\u8df3\u8fc7\u5220\u9664: $file\"\n        }\n    }\n\n    # \u6e05\u7a7a\u6307\u5b9a\u6587\u4ef6\u5939\u5185\u5bb9\n    Write-Host \"$BLUE\ud83d\udd0d &#91;\u68c0\u67e5]$NC \u68c0\u67e5\u5f85\u6e05\u7a7a\u6587\u4ef6\u5939: $folderToCleanContents\"\n    if (Test-Path $folderToCleanContents) {\n        try {\n            Get-ChildItem -Path $folderToCleanContents -Recurse | Remove-Item -Force -Recurse -ErrorAction Stop\n            Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u5df2\u6e05\u7a7a\u6587\u4ef6\u5939\u5185\u5bb9: $folderToCleanContents\"\n        }\n        catch {\n            Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u6e05\u7a7a\u6587\u4ef6\u5939 $folderToCleanContents \u5931\u8d25: $($_.Exception.Message)\"\n        }\n    } else {\n        Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8df3\u8fc7]$NC \u6587\u4ef6\u5939\u4e0d\u5b58\u5728\uff0c\u8df3\u8fc7\u6e05\u7a7a: $folderToCleanContents\"\n    }\n\n    # \u5b8c\u5168\u5220\u9664\u6307\u5b9a\u6587\u4ef6\u5939\n    Write-Host \"$BLUE\ud83d\udd0d &#91;\u68c0\u67e5]$NC \u68c0\u67e5\u5f85\u5220\u9664\u6587\u4ef6\u5939: $folderToDeleteCompletely\"\n    if (Test-Path $folderToDeleteCompletely) {\n        try {\n            Remove-Item -Path $folderToDeleteCompletely -Recurse -Force -ErrorAction Stop\n            Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u5df2\u5220\u9664\u6587\u4ef6\u5939: $folderToDeleteCompletely\"\n        }\n        catch {\n            Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u5220\u9664\u6587\u4ef6\u5939 $folderToDeleteCompletely \u5931\u8d25: $($_.Exception.Message)\"\n        }\n    } else {\n        Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8df3\u8fc7]$NC \u6587\u4ef6\u5939\u4e0d\u5b58\u5728\uff0c\u8df3\u8fc7\u5220\u9664: $folderToDeleteCompletely\"\n    }\n\n    Write-Host \"$GREEN\u2705 &#91;\u5b8c\u6210]$NC Cursor \u521d\u59cb\u5316\u6e05\u7406\u5b8c\u6210\"\n    Write-Host \"\"\n}\n\n# \ud83d\udd27 \u4fee\u6539\u7cfb\u7edf\u6ce8\u518c\u8868 MachineGuid\uff08\u4ece\u65e7\u7248\u672c\u79fb\u690d\uff09\nfunction Update-MachineGuid {\n    try {\n        Write-Host \"$BLUE\ud83d\udd27 &#91;\u6ce8\u518c\u8868]$NC \u6b63\u5728\u4fee\u6539\u7cfb\u7edf\u6ce8\u518c\u8868 MachineGuid...\"\n\n        # \u68c0\u67e5\u6ce8\u518c\u8868\u8def\u5f84\u662f\u5426\u5b58\u5728\uff0c\u4e0d\u5b58\u5728\u5219\u521b\u5efa\n        $registryPath = \"HKLM:\\SOFTWARE\\Microsoft\\Cryptography\"\n        if (-not (Test-Path $registryPath)) {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u6ce8\u518c\u8868\u8def\u5f84\u4e0d\u5b58\u5728: $registryPath\uff0c\u6b63\u5728\u521b\u5efa...\"\n            New-Item -Path $registryPath -Force | Out-Null\n            Write-Host \"$GREEN\u2705 &#91;\u4fe1\u606f]$NC \u6ce8\u518c\u8868\u8def\u5f84\u521b\u5efa\u6210\u529f\"\n        }\n\n        # \u83b7\u53d6\u5f53\u524d\u7684 MachineGuid\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u5219\u4f7f\u7528\u7a7a\u5b57\u7b26\u4e32\u4f5c\u4e3a\u9ed8\u8ba4\u503c\n        $originalGuid = \"\"\n        try {\n            $currentGuid = Get-ItemProperty -Path $registryPath -Name MachineGuid -ErrorAction SilentlyContinue\n            if ($currentGuid) {\n                $originalGuid = $currentGuid.MachineGuid\n                Write-Host \"$GREEN\u2705 &#91;\u4fe1\u606f]$NC \u5f53\u524d\u6ce8\u518c\u8868\u503c\uff1a\"\n                Write-Host \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\"\n                Write-Host \"    MachineGuid    REG_SZ    $originalGuid\"\n            } else {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC MachineGuid \u503c\u4e0d\u5b58\u5728\uff0c\u5c06\u521b\u5efa\u65b0\u503c\"\n            }\n        } catch {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u8bfb\u53d6\u6ce8\u518c\u8868\u5931\u8d25: $($_.Exception.Message)\"\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u5c06\u5c1d\u8bd5\u521b\u5efa\u65b0\u7684 MachineGuid \u503c\"\n        }\n\n        # \u521b\u5efa\u5907\u4efd\u6587\u4ef6\uff08\u4ec5\u5f53\u539f\u59cb\u503c\u5b58\u5728\u65f6\uff09\n        $backupFile = $null\n        if ($originalGuid) {\n            $backupFile = \"$BACKUP_DIR\\MachineGuid_$(Get-Date -Format 'yyyyMMdd_HHmmss').reg\"\n            Write-Host \"$BLUE\ud83d\udcbe &#91;\u5907\u4efd]$NC \u6b63\u5728\u5907\u4efd\u6ce8\u518c\u8868...\"\n            $backupResult = Start-Process \"reg.exe\" -ArgumentList \"export\", \"`\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography`\"\", \"`\"$backupFile`\"\" -NoNewWindow -Wait -PassThru\n\n            if ($backupResult.ExitCode -eq 0) {\n                Write-Host \"$GREEN\u2705 &#91;\u5907\u4efd]$NC \u6ce8\u518c\u8868\u9879\u5df2\u5907\u4efd\u5230\uff1a$backupFile\"\n            } else {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u5907\u4efd\u521b\u5efa\u5931\u8d25\uff0c\u7ee7\u7eed\u6267\u884c...\"\n                $backupFile = $null\n            }\n        }\n\n        # \u751f\u6210\u65b0GUID\n        $newGuid = &#91;System.Guid]::NewGuid().ToString()\n        Write-Host \"$BLUE\ud83d\udd04 &#91;\u751f\u6210]$NC \u65b0\u7684 MachineGuid: $newGuid\"\n\n        # \u66f4\u65b0\u6216\u521b\u5efa\u6ce8\u518c\u8868\u503c\n        Set-ItemProperty -Path $registryPath -Name MachineGuid -Value $newGuid -Force -ErrorAction Stop\n\n        # \u9a8c\u8bc1\u66f4\u65b0\n        $verifyGuid = (Get-ItemProperty -Path $registryPath -Name MachineGuid -ErrorAction Stop).MachineGuid\n        if ($verifyGuid -ne $newGuid) {\n            throw \"\u6ce8\u518c\u8868\u9a8c\u8bc1\u5931\u8d25\uff1a\u66f4\u65b0\u540e\u7684\u503c ($verifyGuid) \u4e0e\u9884\u671f\u503c ($newGuid) \u4e0d\u5339\u914d\"\n        }\n\n        Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u6ce8\u518c\u8868\u66f4\u65b0\u6210\u529f\uff1a\"\n        Write-Host \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography\"\n        Write-Host \"    MachineGuid    REG_SZ    $newGuid\"\n        return $true\n    }\n    catch {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u6ce8\u518c\u8868\u64cd\u4f5c\u5931\u8d25\uff1a$($_.Exception.Message)\"\n\n        # \u5c1d\u8bd5\u6062\u590d\u5907\u4efd\uff08\u5982\u679c\u5b58\u5728\uff09\n        if ($backupFile -and (Test-Path $backupFile)) {\n            Write-Host \"$YELLOW\ud83d\udd04 &#91;\u6062\u590d]$NC \u6b63\u5728\u4ece\u5907\u4efd\u6062\u590d...\"\n            $restoreResult = Start-Process \"reg.exe\" -ArgumentList \"import\", \"`\"$backupFile`\"\" -NoNewWindow -Wait -PassThru\n\n            if ($restoreResult.ExitCode -eq 0) {\n                Write-Host \"$GREEN\u2705 &#91;\u6062\u590d\u6210\u529f]$NC \u5df2\u8fd8\u539f\u539f\u59cb\u6ce8\u518c\u8868\u503c\"\n            } else {\n                Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u6062\u590d\u5931\u8d25\uff0c\u8bf7\u624b\u52a8\u5bfc\u5165\u5907\u4efd\u6587\u4ef6\uff1a$backupFile\"\n            }\n        } else {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u672a\u627e\u5230\u5907\u4efd\u6587\u4ef6\u6216\u5907\u4efd\u521b\u5efa\u5931\u8d25\uff0c\u65e0\u6cd5\u81ea\u52a8\u6062\u590d\"\n        }\n\n        return $false\n    }\n}\n\n# \u68c0\u67e5\u914d\u7f6e\u6587\u4ef6\u548c\u73af\u5883\nfunction Test-CursorEnvironment {\n    param(\n        &#91;string]$Mode = \"FULL\"\n    )\n\n    Write-Host \"\"\n    Write-Host \"$BLUE\ud83d\udd0d &#91;\u73af\u5883\u68c0\u67e5]$NC \u6b63\u5728\u68c0\u67e5Cursor\u73af\u5883...\"\n\n    $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n    $cursorAppData = \"$env:APPDATA\\Cursor\"\n    $issues = @()\n\n    # \u68c0\u67e5\u914d\u7f6e\u6587\u4ef6\n    if (-not (Test-Path $configPath)) {\n        $issues += \"\u914d\u7f6e\u6587\u4ef6\u4e0d\u5b58\u5728: $configPath\"\n    } else {\n        try {\n            $content = Get-Content $configPath -Raw -Encoding UTF8 -ErrorAction Stop\n            $config = $content | ConvertFrom-Json -ErrorAction Stop\n            Write-Host \"$GREEN\u2705 &#91;\u68c0\u67e5]$NC \u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u6b63\u786e\"\n        } catch {\n            $issues += \"\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u9519\u8bef: $($_.Exception.Message)\"\n        }\n    }\n\n    # \u68c0\u67e5Cursor\u76ee\u5f55\u7ed3\u6784\n    if (-not (Test-Path $cursorAppData)) {\n        $issues += \"Cursor\u5e94\u7528\u6570\u636e\u76ee\u5f55\u4e0d\u5b58\u5728: $cursorAppData\"\n    }\n\n    # \u68c0\u67e5Cursor\u5b89\u88c5\n    $cursorPaths = @(\n        \"$env:LOCALAPPDATA\\Programs\\cursor\\Cursor.exe\",\n        \"$env:PROGRAMFILES\\Cursor\\Cursor.exe\",\n        \"$env:PROGRAMFILES(X86)\\Cursor\\Cursor.exe\"\n    )\n\n    $cursorFound = $false\n    foreach ($path in $cursorPaths) {\n        if (Test-Path $path) {\n            Write-Host \"$GREEN\u2705 &#91;\u68c0\u67e5]$NC \u627e\u5230Cursor\u5b89\u88c5: $path\"\n            $cursorFound = $true\n            break\n        }\n    }\n\n    if (-not $cursorFound) {\n        $issues += \"\u672a\u627e\u5230Cursor\u5b89\u88c5\uff0c\u8bf7\u786e\u8ba4Cursor\u5df2\u6b63\u786e\u5b89\u88c5\"\n    }\n\n    # \u8fd4\u56de\u68c0\u67e5\u7ed3\u679c\n    if ($issues.Count -eq 0) {\n        Write-Host \"$GREEN\u2705 &#91;\u73af\u5883\u68c0\u67e5]$NC \u6240\u6709\u68c0\u67e5\u901a\u8fc7\"\n        return @{ Success = $true; Issues = @() }\n    } else {\n        Write-Host \"$RED\u274c &#91;\u73af\u5883\u68c0\u67e5]$NC \u53d1\u73b0 $($issues.Count) \u4e2a\u95ee\u9898\uff1a\"\n        foreach ($issue in $issues) {\n            Write-Host \"$RED  \u2022 ${issue}$NC\"\n        }\n        return @{ Success = $false; Issues = $issues }\n    }\n}\n\n# \ufffd\ud83d\udee0\ufe0f \u4fee\u6539\u673a\u5668\u7801\u914d\u7f6e\uff08\u589e\u5f3a\u7248\uff09\nfunction Modify-MachineCodeConfig {\n    param(\n        &#91;string]$Mode = \"FULL\"\n    )\n\n    Write-Host \"\"\n    Write-Host \"$GREEN\ud83d\udee0\ufe0f  &#91;\u914d\u7f6e]$NC \u6b63\u5728\u4fee\u6539\u673a\u5668\u7801\u914d\u7f6e...\"\n\n    $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n\n    # \u589e\u5f3a\u7684\u914d\u7f6e\u6587\u4ef6\u68c0\u67e5\n    if (-not (Test-Path $configPath)) {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u914d\u7f6e\u6587\u4ef6\u4e0d\u5b58\u5728: $configPath\"\n        Write-Host \"\"\n        Write-Host \"$YELLOW\ud83d\udca1 &#91;\u89e3\u51b3\u65b9\u6848]$NC \u8bf7\u5c1d\u8bd5\u4ee5\u4e0b\u6b65\u9aa4\uff1a\"\n        Write-Host \"$BLUE  1\ufe0f\u20e3  \u624b\u52a8\u542f\u52a8Cursor\u5e94\u7528\u7a0b\u5e8f$NC\"\n        Write-Host \"$BLUE  2\ufe0f\u20e3  \u7b49\u5f85Cursor\u5b8c\u5168\u52a0\u8f7d\uff08\u7ea630\u79d2\uff09$NC\"\n        Write-Host \"$BLUE  3\ufe0f\u20e3  \u5173\u95edCursor\u5e94\u7528\u7a0b\u5e8f$NC\"\n        Write-Host \"$BLUE  4\ufe0f\u20e3  \u91cd\u65b0\u8fd0\u884c\u6b64\u811a\u672c$NC\"\n        Write-Host \"\"\n        Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u5907\u9009\u65b9\u6848]$NC \u5982\u679c\u95ee\u9898\u6301\u7eed\uff1a\"\n        Write-Host \"$BLUE  \u2022 \u9009\u62e9\u811a\u672c\u7684'\u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801'\u9009\u9879$NC\"\n        Write-Host \"$BLUE  \u2022 \u8be5\u9009\u9879\u4f1a\u81ea\u52a8\u751f\u6210\u914d\u7f6e\u6587\u4ef6$NC\"\n        Write-Host \"\"\n\n        # \u63d0\u4f9b\u7528\u6237\u9009\u62e9\n        $userChoice = Read-Host \"\u662f\u5426\u73b0\u5728\u5c1d\u8bd5\u542f\u52a8Cursor\u751f\u6210\u914d\u7f6e\u6587\u4ef6\uff1f(y\/n)\"\n        if ($userChoice -match \"^(y|yes)$\") {\n            Write-Host \"$BLUE\ud83d\ude80 &#91;\u5c1d\u8bd5]$NC \u6b63\u5728\u5c1d\u8bd5\u542f\u52a8Cursor...\"\n            return Start-CursorToGenerateConfig\n        }\n\n        return $false\n    }\n\n    # \u5728\u4ec5\u4fee\u6539\u673a\u5668\u7801\u6a21\u5f0f\u4e0b\u4e5f\u8981\u786e\u4fdd\u8fdb\u7a0b\u5b8c\u5168\u5173\u95ed\n    if ($Mode -eq \"MODIFY_ONLY\") {\n        Write-Host \"$BLUE\ud83d\udd12 &#91;\u5b89\u5168\u68c0\u67e5]$NC \u5373\u4f7f\u5728\u4ec5\u4fee\u6539\u6a21\u5f0f\u4e0b\uff0c\u4e5f\u9700\u8981\u786e\u4fddCursor\u8fdb\u7a0b\u5b8c\u5168\u5173\u95ed\"\n        if (-not (Stop-AllCursorProcesses -MaxRetries 3 -WaitSeconds 3)) {\n            Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u65e0\u6cd5\u5173\u95ed\u6240\u6709Cursor\u8fdb\u7a0b\uff0c\u4fee\u6539\u53ef\u80fd\u5931\u8d25\"\n            $userChoice = Read-Host \"\u662f\u5426\u5f3a\u5236\u7ee7\u7eed\uff1f(y\/n)\"\n            if ($userChoice -notmatch \"^(y|yes)$\") {\n                return $false\n            }\n        }\n    }\n\n    # \u68c0\u67e5\u6587\u4ef6\u6743\u9650\u548c\u9501\u5b9a\u72b6\u6001\n    if (-not (Test-FileAccessibility -FilePath $configPath)) {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u65e0\u6cd5\u8bbf\u95ee\u914d\u7f6e\u6587\u4ef6\uff0c\u53ef\u80fd\u88ab\u9501\u5b9a\u6216\u6743\u9650\u4e0d\u8db3\"\n        return $false\n    }\n\n    # \u9a8c\u8bc1\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u5e76\u663e\u793a\u7ed3\u6784\n    try {\n        Write-Host \"$BLUE\ud83d\udd0d &#91;\u9a8c\u8bc1]$NC \u68c0\u67e5\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f...\"\n        $originalContent = Get-Content $configPath -Raw -Encoding UTF8 -ErrorAction Stop\n        $config = $originalContent | ConvertFrom-Json -ErrorAction Stop\n        Write-Host \"$GREEN\u2705 &#91;\u9a8c\u8bc1]$NC \u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u6b63\u786e\"\n\n        # \u663e\u793a\u5f53\u524d\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u76f8\u5173\u5c5e\u6027\n        Write-Host \"$BLUE\ud83d\udccb &#91;\u5f53\u524d\u914d\u7f6e]$NC \u68c0\u67e5\u73b0\u6709\u7684\u9065\u6d4b\u5c5e\u6027\uff1a\"\n        $telemetryProperties = @('telemetry.machineId', 'telemetry.macMachineId', 'telemetry.devDeviceId', 'telemetry.sqmId')\n        foreach ($prop in $telemetryProperties) {\n            if ($config.PSObject.Properties&#91;$prop]) {\n                $value = $config.$prop\n                $displayValue = if ($value.Length -gt 20) { \"$($value.Substring(0,20))...\" } else { $value }\n                Write-Host \"$GREEN  \u2713 ${prop}$NC = $displayValue\"\n            } else {\n                Write-Host \"$YELLOW  - ${prop}$NC (\u4e0d\u5b58\u5728\uff0c\u5c06\u521b\u5efa)\"\n            }\n        }\n        Write-Host \"\"\n    } catch {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u9519\u8bef: $($_.Exception.Message)\"\n        Write-Host \"$YELLOW\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u914d\u7f6e\u6587\u4ef6\u53ef\u80fd\u5df2\u635f\u574f\uff0c\u5efa\u8bae\u9009\u62e9'\u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801'\u9009\u9879\"\n        return $false\n    }\n\n    # \u5b9e\u73b0\u539f\u5b50\u6027\u6587\u4ef6\u64cd\u4f5c\u548c\u91cd\u8bd5\u673a\u5236\n    $maxRetries = 3\n    $retryCount = 0\n\n    while ($retryCount -lt $maxRetries) {\n        $retryCount++\n        Write-Host \"\"\n        Write-Host \"$BLUE\ud83d\udd04 &#91;\u5c1d\u8bd5]$NC \u7b2c $retryCount\/$maxRetries \u6b21\u4fee\u6539\u5c1d\u8bd5...\"\n\n        try {\n            # \u663e\u793a\u64cd\u4f5c\u8fdb\u5ea6\n            Write-Host \"$BLUE\u23f3 &#91;\u8fdb\u5ea6]$NC 1\/6 - \u751f\u6210\u65b0\u7684\u8bbe\u5907\u6807\u8bc6\u7b26...\"\n\n            # \u751f\u6210\u65b0\u7684ID\n            $MAC_MACHINE_ID = &#91;System.Guid]::NewGuid().ToString()\n            $UUID = &#91;System.Guid]::NewGuid().ToString()\n            $prefixBytes = &#91;System.Text.Encoding]::UTF8.GetBytes(\"auth0|user_\")\n            $prefixHex = -join ($prefixBytes | ForEach-Object { '{0:x2}' -f $_ })\n            $randomBytes = New-Object byte&#91;] 32\n            $rng = &#91;System.Security.Cryptography.RNGCryptoServiceProvider]::new()\n            $rng.GetBytes($randomBytes)\n            $randomPart = &#91;System.BitConverter]::ToString($randomBytes) -replace '-',''\n            $rng.Dispose()\n            $MACHINE_ID = \"${prefixHex}${randomPart}\"\n            $SQM_ID = \"{$(&#91;System.Guid]::NewGuid().ToString().ToUpper())}\"\n\n            Write-Host \"$GREEN\u2705 &#91;\u8fdb\u5ea6]$NC 1\/6 - \u8bbe\u5907\u6807\u8bc6\u7b26\u751f\u6210\u5b8c\u6210\"\n\n            Write-Host \"$BLUE\u23f3 &#91;\u8fdb\u5ea6]$NC 2\/6 - \u521b\u5efa\u5907\u4efd\u76ee\u5f55...\"\n\n            # \u5907\u4efd\u539f\u59cb\u503c\uff08\u589e\u5f3a\u7248\uff09\n            $backupDir = \"$env:APPDATA\\Cursor\\User\\globalStorage\\backups\"\n            if (-not (Test-Path $backupDir)) {\n                New-Item -ItemType Directory -Path $backupDir -Force -ErrorAction Stop | Out-Null\n            }\n\n            $backupName = \"storage.json.backup_$(Get-Date -Format 'yyyyMMdd_HHmmss')_retry$retryCount\"\n            $backupPath = \"$backupDir\\$backupName\"\n\n            Write-Host \"$BLUE\u23f3 &#91;\u8fdb\u5ea6]$NC 3\/6 - \u5907\u4efd\u539f\u59cb\u914d\u7f6e...\"\n            Copy-Item $configPath $backupPath -ErrorAction Stop\n\n            # \u9a8c\u8bc1\u5907\u4efd\u662f\u5426\u6210\u529f\n            if (Test-Path $backupPath) {\n                $backupSize = (Get-Item $backupPath).Length\n                $originalSize = (Get-Item $configPath).Length\n                if ($backupSize -eq $originalSize) {\n                    Write-Host \"$GREEN\u2705 &#91;\u8fdb\u5ea6]$NC 3\/6 - \u914d\u7f6e\u5907\u4efd\u6210\u529f: $backupName\"\n                } else {\n                    Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u5907\u4efd\u6587\u4ef6\u5927\u5c0f\u4e0d\u5339\u914d\uff0c\u4f46\u7ee7\u7eed\u6267\u884c\"\n                }\n            } else {\n                throw \"\u5907\u4efd\u6587\u4ef6\u521b\u5efa\u5931\u8d25\"\n            }\n\n            Write-Host \"$BLUE\u23f3 &#91;\u8fdb\u5ea6]$NC 4\/6 - \u8bfb\u53d6\u539f\u59cb\u914d\u7f6e\u5230\u5185\u5b58...\"\n\n            # \u539f\u5b50\u6027\u64cd\u4f5c\uff1a\u8bfb\u53d6\u539f\u59cb\u5185\u5bb9\u5230\u5185\u5b58\n            $originalContent = Get-Content $configPath -Raw -Encoding UTF8 -ErrorAction Stop\n            $config = $originalContent | ConvertFrom-Json -ErrorAction Stop\n\n            Write-Host \"$BLUE\u23f3 &#91;\u8fdb\u5ea6]$NC 5\/6 - \u5728\u5185\u5b58\u4e2d\u66f4\u65b0\u914d\u7f6e...\"\n\n            # \u66f4\u65b0\u914d\u7f6e\u503c\uff08\u5b89\u5168\u65b9\u5f0f\uff0c\u786e\u4fdd\u5c5e\u6027\u5b58\u5728\uff09\n            $propertiesToUpdate = @{\n                'telemetry.machineId' = $MACHINE_ID\n                'telemetry.macMachineId' = $MAC_MACHINE_ID\n                'telemetry.devDeviceId' = $UUID\n                'telemetry.sqmId' = $SQM_ID\n            }\n\n            foreach ($property in $propertiesToUpdate.GetEnumerator()) {\n                $key = $property.Key\n                $value = $property.Value\n\n                # \u4f7f\u7528 Add-Member \u6216\u76f4\u63a5\u8d4b\u503c\u7684\u5b89\u5168\u65b9\u5f0f\n                if ($config.PSObject.Properties&#91;$key]) {\n                    # \u5c5e\u6027\u5b58\u5728\uff0c\u76f4\u63a5\u66f4\u65b0\n                    $config.$key = $value\n                    Write-Host \"$BLUE  \u2713 \u66f4\u65b0\u5c5e\u6027: ${key}$NC\"\n                } else {\n                    # \u5c5e\u6027\u4e0d\u5b58\u5728\uff0c\u6dfb\u52a0\u65b0\u5c5e\u6027\n                    $config | Add-Member -MemberType NoteProperty -Name $key -Value $value -Force\n                    Write-Host \"$BLUE  + \u6dfb\u52a0\u5c5e\u6027: ${key}$NC\"\n                }\n            }\n\n            Write-Host \"$BLUE\u23f3 &#91;\u8fdb\u5ea6]$NC 6\/6 - \u539f\u5b50\u6027\u5199\u5165\u65b0\u914d\u7f6e\u6587\u4ef6...\"\n\n            # \u539f\u5b50\u6027\u64cd\u4f5c\uff1a\u5220\u9664\u539f\u6587\u4ef6\uff0c\u5199\u5165\u65b0\u6587\u4ef6\n            $tempPath = \"$configPath.tmp\"\n            $updatedJson = $config | ConvertTo-Json -Depth 10\n\n            # \u5199\u5165\u4e34\u65f6\u6587\u4ef6\n            &#91;System.IO.File]::WriteAllText($tempPath, $updatedJson, &#91;System.Text.Encoding]::UTF8)\n\n            # \u9a8c\u8bc1\u4e34\u65f6\u6587\u4ef6\n            $tempContent = Get-Content $tempPath -Raw -Encoding UTF8\n            $tempConfig = $tempContent | ConvertFrom-Json\n\n            # \u9a8c\u8bc1\u6240\u6709\u5c5e\u6027\u662f\u5426\u6b63\u786e\u5199\u5165\n            $tempVerificationPassed = $true\n            foreach ($property in $propertiesToUpdate.GetEnumerator()) {\n                $key = $property.Key\n                $expectedValue = $property.Value\n                $actualValue = $tempConfig.$key\n\n                if ($actualValue -ne $expectedValue) {\n                    $tempVerificationPassed = $false\n                    Write-Host \"$RED  \u2717 \u4e34\u65f6\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25: ${key}$NC\"\n                    break\n                }\n            }\n\n            if (-not $tempVerificationPassed) {\n                Remove-Item $tempPath -Force -ErrorAction SilentlyContinue\n                throw \"\u4e34\u65f6\u6587\u4ef6\u9a8c\u8bc1\u5931\u8d25\"\n            }\n\n            # \u539f\u5b50\u6027\u66ff\u6362\uff1a\u5220\u9664\u539f\u6587\u4ef6\uff0c\u91cd\u547d\u540d\u4e34\u65f6\u6587\u4ef6\n            Remove-Item $configPath -Force\n            Move-Item $tempPath $configPath\n\n            # \u8bbe\u7f6e\u6587\u4ef6\u4e3a\u53ea\u8bfb\uff08\u53ef\u9009\uff09\n            $file = Get-Item $configPath\n            $file.IsReadOnly = $false  # \u4fdd\u6301\u53ef\u5199\uff0c\u4fbf\u4e8e\u540e\u7eed\u4fee\u6539\n\n            # \u6700\u7ec8\u9a8c\u8bc1\u4fee\u6539\u7ed3\u679c\n            Write-Host \"$BLUE\ud83d\udd0d &#91;\u6700\u7ec8\u9a8c\u8bc1]$NC \u9a8c\u8bc1\u65b0\u914d\u7f6e\u6587\u4ef6...\"\n\n            $verifyContent = Get-Content $configPath -Raw -Encoding UTF8\n            $verifyConfig = $verifyContent | ConvertFrom-Json\n\n            $verificationPassed = $true\n            $verificationResults = @()\n\n            # \u5b89\u5168\u9a8c\u8bc1\u6bcf\u4e2a\u5c5e\u6027\n            foreach ($property in $propertiesToUpdate.GetEnumerator()) {\n                $key = $property.Key\n                $expectedValue = $property.Value\n                $actualValue = $verifyConfig.$key\n\n                if ($actualValue -eq $expectedValue) {\n                    $verificationResults += \"\u2713 ${key}: \u9a8c\u8bc1\u901a\u8fc7\"\n                } else {\n                    $verificationResults += \"\u2717 ${key}: \u9a8c\u8bc1\u5931\u8d25 (\u671f\u671b: ${expectedValue}, \u5b9e\u9645: ${actualValue})\"\n                    $verificationPassed = $false\n                }\n            }\n\n            # \u663e\u793a\u9a8c\u8bc1\u7ed3\u679c\n            Write-Host \"$BLUE\ud83d\udccb &#91;\u9a8c\u8bc1\u8be6\u60c5]$NC\"\n            foreach ($result in $verificationResults) {\n                Write-Host \"   $result\"\n            }\n\n            if ($verificationPassed) {\n                Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u7b2c $retryCount \u6b21\u5c1d\u8bd5\u4fee\u6539\u6210\u529f\uff01\"\n                Write-Host \"\"\n                Write-Host \"$GREEN\ud83c\udf89 &#91;\u5b8c\u6210]$NC \u673a\u5668\u7801\u914d\u7f6e\u4fee\u6539\u5b8c\u6210\uff01\"\n                Write-Host \"$BLUE\ud83d\udccb &#91;\u8be6\u60c5]$NC \u5df2\u66f4\u65b0\u4ee5\u4e0b\u6807\u8bc6\u7b26\uff1a\"\n                Write-Host \"   \ud83d\udd39 machineId: $MACHINE_ID\"\n                Write-Host \"   \ud83d\udd39 macMachineId: $MAC_MACHINE_ID\"\n                Write-Host \"   \ud83d\udd39 devDeviceId: $UUID\"\n                Write-Host \"   \ud83d\udd39 sqmId: $SQM_ID\"\n                Write-Host \"\"\n                Write-Host \"$GREEN\ud83d\udcbe &#91;\u5907\u4efd]$NC \u539f\u914d\u7f6e\u5df2\u5907\u4efd\u81f3: $backupName\"\n\n                # \ud83d\udd12 \u6dfb\u52a0\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4\u673a\u5236\n                Write-Host \"$BLUE\ud83d\udd12 &#91;\u4fdd\u62a4]$NC \u6b63\u5728\u8bbe\u7f6e\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4...\"\n                try {\n                    $configFile = Get-Item $configPath\n                    $configFile.IsReadOnly = $true\n                    Write-Host \"$GREEN\u2705 &#91;\u4fdd\u62a4]$NC \u914d\u7f6e\u6587\u4ef6\u5df2\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\uff0c\u9632\u6b62Cursor\u8986\u76d6\u4fee\u6539\"\n                    Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u6587\u4ef6\u8def\u5f84: $configPath\"\n                } catch {\n                    Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u4fdd\u62a4]$NC \u8bbe\u7f6e\u53ea\u8bfb\u5c5e\u6027\u5931\u8d25: $($_.Exception.Message)\"\n                    Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u624b\u52a8\u53f3\u952e\u6587\u4ef6 \u2192 \u5c5e\u6027 \u2192 \u52fe\u9009'\u53ea\u8bfb'\"\n                }\n                Write-Host \"$BLUE \ud83d\udd12 &#91;\u5b89\u5168]$NC \u5efa\u8bae\u91cd\u542fCursor\u4ee5\u786e\u4fdd\u914d\u7f6e\u751f\u6548\"\n                return $true\n            } else {\n                Write-Host \"$RED\u274c &#91;\u5931\u8d25]$NC \u7b2c $retryCount \u6b21\u5c1d\u8bd5\u9a8c\u8bc1\u5931\u8d25\"\n                if ($retryCount -lt $maxRetries) {\n                    Write-Host \"$BLUE\ud83d\udd04 &#91;\u6062\u590d]$NC \u6062\u590d\u5907\u4efd\uff0c\u51c6\u5907\u91cd\u8bd5...\"\n                    Copy-Item $backupPath $configPath -Force\n                    Start-Sleep -Seconds 2\n                    continue  # \u7ee7\u7eed\u4e0b\u4e00\u6b21\u91cd\u8bd5\n                } else {\n                    Write-Host \"$RED\u274c &#91;\u6700\u7ec8\u5931\u8d25]$NC \u6240\u6709\u91cd\u8bd5\u90fd\u5931\u8d25\uff0c\u6062\u590d\u539f\u59cb\u914d\u7f6e\"\n                    Copy-Item $backupPath $configPath -Force\n                    return $false\n                }\n            }\n\n        } catch {\n            Write-Host \"$RED\u274c &#91;\u5f02\u5e38]$NC \u7b2c $retryCount \u6b21\u5c1d\u8bd5\u51fa\u73b0\u5f02\u5e38: $($_.Exception.Message)\"\n            Write-Host \"$BLUE\ud83d\udca1 &#91;\u8c03\u8bd5\u4fe1\u606f]$NC \u9519\u8bef\u7c7b\u578b: $($_.Exception.GetType().FullName)\"\n\n            # \u6e05\u7406\u4e34\u65f6\u6587\u4ef6\n            if (Test-Path \"$configPath.tmp\") {\n                Remove-Item \"$configPath.tmp\" -Force -ErrorAction SilentlyContinue\n            }\n\n            if ($retryCount -lt $maxRetries) {\n                Write-Host \"$BLUE\ud83d\udd04 &#91;\u6062\u590d]$NC \u6062\u590d\u5907\u4efd\uff0c\u51c6\u5907\u91cd\u8bd5...\"\n                if (Test-Path $backupPath) {\n                    Copy-Item $backupPath $configPath -Force\n                }\n                Start-Sleep -Seconds 3\n                continue  # \u7ee7\u7eed\u4e0b\u4e00\u6b21\u91cd\u8bd5\n            } else {\n                Write-Host \"$RED\u274c &#91;\u6700\u7ec8\u5931\u8d25]$NC \u6240\u6709\u91cd\u8bd5\u90fd\u5931\u8d25\"\n                # \u5c1d\u8bd5\u6062\u590d\u5907\u4efd\n                if (Test-Path $backupPath) {\n                    Write-Host \"$BLUE\ud83d\udd04 &#91;\u6062\u590d]$NC \u6b63\u5728\u6062\u590d\u5907\u4efd\u914d\u7f6e...\"\n                    try {\n                        Copy-Item $backupPath $configPath -Force\n                        Write-Host \"$GREEN\u2705 &#91;\u6062\u590d]$NC \u5df2\u6062\u590d\u539f\u59cb\u914d\u7f6e\"\n                    } catch {\n                        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u6062\u590d\u5907\u4efd\u5931\u8d25: $($_.Exception.Message)\"\n                    }\n                }\n                return $false\n            }\n        }\n    }\n\n    # \u5982\u679c\u5230\u8fbe\u8fd9\u91cc\uff0c\u8bf4\u660e\u6240\u6709\u91cd\u8bd5\u90fd\u5931\u8d25\u4e86\n    Write-Host \"$RED\u274c &#91;\u6700\u7ec8\u5931\u8d25]$NC \u7ecf\u8fc7 $maxRetries \u6b21\u5c1d\u8bd5\u4ecd\u65e0\u6cd5\u5b8c\u6210\u4fee\u6539\"\n    return $false\n\n}\n\n#  \u542f\u52a8Cursor\u751f\u6210\u914d\u7f6e\u6587\u4ef6\nfunction Start-CursorToGenerateConfig {\n    Write-Host \"$BLUE\ud83d\ude80 &#91;\u542f\u52a8]$NC \u6b63\u5728\u5c1d\u8bd5\u542f\u52a8Cursor\u751f\u6210\u914d\u7f6e\u6587\u4ef6...\"\n\n    # \u67e5\u627eCursor\u53ef\u6267\u884c\u6587\u4ef6\n    $cursorPaths = @(\n        \"$env:LOCALAPPDATA\\Programs\\cursor\\Cursor.exe\",\n        \"$env:PROGRAMFILES\\Cursor\\Cursor.exe\",\n        \"$env:PROGRAMFILES(X86)\\Cursor\\Cursor.exe\"\n    )\n\n    $cursorPath = $null\n    foreach ($path in $cursorPaths) {\n        if (Test-Path $path) {\n            $cursorPath = $path\n            break\n        }\n    }\n\n    if (-not $cursorPath) {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u672a\u627e\u5230Cursor\u5b89\u88c5\uff0c\u8bf7\u786e\u8ba4Cursor\u5df2\u6b63\u786e\u5b89\u88c5\"\n        return $false\n    }\n\n    try {\n        Write-Host \"$BLUE\ud83d\udccd &#91;\u8def\u5f84]$NC \u4f7f\u7528Cursor\u8def\u5f84: $cursorPath\"\n\n        # \u542f\u52a8Cursor\n        $process = Start-Process -FilePath $cursorPath -PassThru -WindowStyle Normal\n        Write-Host \"$GREEN\ud83d\ude80 &#91;\u542f\u52a8]$NC Cursor\u5df2\u542f\u52a8\uff0cPID: $($process.Id)\"\n\n        Write-Host \"$YELLOW\u23f3 &#91;\u7b49\u5f85]$NC \u8bf7\u7b49\u5f85Cursor\u5b8c\u5168\u52a0\u8f7d\uff08\u7ea630\u79d2\uff09...\"\n        Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u60a8\u53ef\u4ee5\u5728Cursor\u5b8c\u5168\u52a0\u8f7d\u540e\u624b\u52a8\u5173\u95ed\u5b83\"\n\n        # \u7b49\u5f85\u914d\u7f6e\u6587\u4ef6\u751f\u6210\n        $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n        $maxWait = 60\n        $waited = 0\n\n        while (-not (Test-Path $configPath) -and $waited -lt $maxWait) {\n            Start-Sleep -Seconds 2\n            $waited += 2\n            if ($waited % 10 -eq 0) {\n                Write-Host \"$YELLOW\u23f3 &#91;\u7b49\u5f85]$NC \u7b49\u5f85\u914d\u7f6e\u6587\u4ef6\u751f\u6210... ($waited\/$maxWait \u79d2)\"\n            }\n        }\n\n        if (Test-Path $configPath) {\n            Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC \u914d\u7f6e\u6587\u4ef6\u5df2\u751f\u6210\uff01\"\n            Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u73b0\u5728\u53ef\u4ee5\u5173\u95edCursor\u5e76\u91cd\u65b0\u8fd0\u884c\u811a\u672c\"\n            return $true\n        } else {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8d85\u65f6]$NC \u914d\u7f6e\u6587\u4ef6\u672a\u5728\u9884\u671f\u65f6\u95f4\u5185\u751f\u6210\"\n            Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u8bf7\u624b\u52a8\u64cd\u4f5cCursor\uff08\u5982\u521b\u5efa\u65b0\u6587\u4ef6\uff09\u4ee5\u89e6\u53d1\u914d\u7f6e\u751f\u6210\"\n            return $false\n        }\n\n    } catch {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u542f\u52a8Cursor\u5931\u8d25: $($_.Exception.Message)\"\n        return $false\n    }\n}\n\n# \u68c0\u67e5\u7ba1\u7406\u5458\u6743\u9650\nfunction Test-Administrator {\n    $user = &#91;Security.Principal.WindowsIdentity]::GetCurrent()\n    $principal = New-Object Security.Principal.WindowsPrincipal($user)\n    return $principal.IsInRole(&#91;Security.Principal.WindowsBuiltInRole]::Administrator)\n}\n\nif (-not (Test-Administrator)) {\n    Write-Host \"$RED&#91;\u9519\u8bef]$NC \u8bf7\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u8fd0\u884c\u6b64\u811a\u672c\"\n    Write-Host \"\u8bf7\u53f3\u952e\u70b9\u51fb\u811a\u672c\uff0c\u9009\u62e9'\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u8fd0\u884c'\"\n    Read-Host \"\u6309\u56de\u8f66\u952e\u9000\u51fa\"\n    exit 1\n}\n\n# \u663e\u793a Logo\nClear-Host\nWrite-Host @\"\n\n    \u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557   \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \n   \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\n   \u2588\u2588\u2551     \u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\n   \u2588\u2588\u2551     \u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\n   \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551  \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551  \u2588\u2588\u2551\n    \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d  \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d  \u255a\u2550\u255d\n\n\"@\nWrite-Host \"$BLUE================================$NC\"\nWrite-Host \"$GREEN\ud83d\ude80   Cursor \u9632\u6389\u8bd5\u7528Pro\u5220\u9664\u5de5\u5177          $NC\"\nWrite-Host \"$YELLOW\ud83d\udcf1  \u5173\u6ce8\u516c\u4f17\u53f7\u3010\u714e\u997c\u679c\u5b50\u5377AI\u3011 $NC\"\nWrite-Host \"$YELLOW\ud83e\udd1d  \u4e00\u8d77\u4ea4\u6d41\u66f4\u591aCursor\u6280\u5de7\u548cAI\u77e5\u8bc6(\u811a\u672c\u514d\u8d39\u3001\u5173\u6ce8\u516c\u4f17\u53f7\u52a0\u7fa4\u6709\u66f4\u591a\u6280\u5de7\u548c\u5927\u4f6c)  $NC\"\nWrite-Host \"$YELLOW\ud83d\udca1  &#91;\u91cd\u8981\u63d0\u793a] \u672c\u5de5\u5177\u514d\u8d39\uff0c\u5982\u679c\u5bf9\u60a8\u6709\u5e2e\u52a9\uff0c\u8bf7\u5173\u6ce8\u516c\u4f17\u53f7\u3010\u714e\u997c\u679c\u5b50\u5377AI\u3011  $NC\"\nWrite-Host \"\"\nWrite-Host \"$YELLOW\ud83d\udcb0   &#91;\u5c0f\u5c0f\u5e7f\u544a]  \u51fa\u552eCursorPro\u6559\u80b2\u53f7\u4e00\u5e74\u8d28\u4fdd\u4e09\u4e2a\u6708\uff0c\u6709\u9700\u8981\u627e\u6211(86)\uff0cWeChat\uff1aJavaRookie666  $NC\"\nWrite-Host \"$BLUE================================$NC\"\n\n# \ud83c\udfaf \u7528\u6237\u9009\u62e9\u83dc\u5355\nWrite-Host \"\"\nWrite-Host \"$GREEN\ud83c\udfaf &#91;\u9009\u62e9\u6a21\u5f0f]$NC \u8bf7\u9009\u62e9\u60a8\u8981\u6267\u884c\u7684\u64cd\u4f5c\uff1a\"\nWrite-Host \"\"\nWrite-Host \"$BLUE  1\ufe0f\u20e3  \u4ec5\u4fee\u6539\u673a\u5668\u7801$NC\"\nWrite-Host \"$YELLOW      \u2022 \u6267\u884c\u673a\u5668\u7801\u4fee\u6539\u529f\u80fd$NC\"\nWrite-Host \"$YELLOW      \u2022 \u6267\u884c\u6ce8\u5165\u7834\u89e3JS\u4ee3\u7801\u5230\u6838\u5fc3\u6587\u4ef6$NC\"\nWrite-Host \"$YELLOW      \u2022 \u8df3\u8fc7\u6587\u4ef6\u5939\u5220\u9664\/\u73af\u5883\u91cd\u7f6e\u6b65\u9aa4$NC\"\nWrite-Host \"$YELLOW      \u2022 \u4fdd\u7559\u73b0\u6709Cursor\u914d\u7f6e\u548c\u6570\u636e$NC\"\nWrite-Host \"\"\nWrite-Host \"$BLUE  2\ufe0f\u20e3  \u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801$NC\"\nWrite-Host \"$RED      \u2022 \u6267\u884c\u5b8c\u5168\u73af\u5883\u91cd\u7f6e\uff08\u5220\u9664Cursor\u6587\u4ef6\u5939\uff09$NC\"\nWrite-Host \"$RED      \u2022 \u26a0\ufe0f  \u914d\u7f6e\u5c06\u4e22\u5931\uff0c\u8bf7\u6ce8\u610f\u5907\u4efd$NC\"\nWrite-Host \"$YELLOW      \u2022 \u6309\u7167\u673a\u5668\u4ee3\u7801\u4fee\u6539$NC\"\nWrite-Host \"$YELLOW      \u2022 \u6267\u884c\u6ce8\u5165\u7834\u89e3JS\u4ee3\u7801\u5230\u6838\u5fc3\u6587\u4ef6$NC\"\nWrite-Host \"$YELLOW      \u2022 \u8fd9\u76f8\u5f53\u4e8e\u5f53\u524d\u7684\u5b8c\u6574\u811a\u672c\u884c\u4e3a$NC\"\nWrite-Host \"\"\n\n# \u83b7\u53d6\u7528\u6237\u9009\u62e9\ndo {\n    $userChoice = Read-Host \"\u8bf7\u8f93\u5165\u9009\u62e9 (1 \u6216 2)\"\n    if ($userChoice -eq \"1\") {\n        Write-Host \"$GREEN\u2705 &#91;\u9009\u62e9]$NC \u60a8\u9009\u62e9\u4e86\uff1a\u4ec5\u4fee\u6539\u673a\u5668\u7801\"\n        $executeMode = \"MODIFY_ONLY\"\n        break\n    } elseif ($userChoice -eq \"2\") {\n        Write-Host \"$GREEN\u2705 &#91;\u9009\u62e9]$NC \u60a8\u9009\u62e9\u4e86\uff1a\u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801\"\n        Write-Host \"$RED\u26a0\ufe0f  &#91;\u91cd\u8981\u8b66\u544a]$NC \u6b64\u64cd\u4f5c\u5c06\u5220\u9664\u6240\u6709Cursor\u914d\u7f6e\u6587\u4ef6\uff01\"\n        $confirmReset = Read-Host \"\u786e\u8ba4\u6267\u884c\u5b8c\u5168\u91cd\u7f6e\uff1f(\u8f93\u5165 yes \u786e\u8ba4\uff0c\u5176\u4ed6\u4efb\u610f\u952e\u53d6\u6d88)\"\n        if ($confirmReset -eq \"yes\") {\n            $executeMode = \"RESET_AND_MODIFY\"\n            break\n        } else {\n            Write-Host \"$YELLOW\ud83d\udc4b &#91;\u53d6\u6d88]$NC \u7528\u6237\u53d6\u6d88\u91cd\u7f6e\u64cd\u4f5c\"\n            continue\n        }\n    } else {\n        Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u65e0\u6548\u9009\u62e9\uff0c\u8bf7\u8f93\u5165 1 \u6216 2\"\n    }\n} while ($true)\n\nWrite-Host \"\"\n\n# \ud83d\udccb \u6839\u636e\u9009\u62e9\u663e\u793a\u6267\u884c\u6d41\u7a0b\u8bf4\u660e\nif ($executeMode -eq \"MODIFY_ONLY\") {\n    Write-Host \"$GREEN\ud83d\udccb &#91;\u6267\u884c\u6d41\u7a0b]$NC \u4ec5\u4fee\u6539\u673a\u5668\u7801\u6a21\u5f0f\u5c06\u6309\u4ee5\u4e0b\u6b65\u9aa4\u6267\u884c\uff1a\"\n    Write-Host \"$BLUE  1\ufe0f\u20e3  \u68c0\u6d4bCursor\u914d\u7f6e\u6587\u4ef6$NC\"\n    Write-Host \"$BLUE  2\ufe0f\u20e3  \u5907\u4efd\u73b0\u6709\u914d\u7f6e\u6587\u4ef6$NC\"\n    Write-Host \"$BLUE  3\ufe0f\u20e3  \u4fee\u6539\u673a\u5668\u7801\u914d\u7f6e$NC\"\n    Write-Host \"$BLUE  4\ufe0f\u20e3  \u663e\u793a\u64cd\u4f5c\u5b8c\u6210\u4fe1\u606f$NC\"\n    Write-Host \"\"\n    Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u6ce8\u610f\u4e8b\u9879]$NC\"\n    Write-Host \"$YELLOW  \u2022 \u4e0d\u4f1a\u5220\u9664\u4efb\u4f55\u6587\u4ef6\u5939\u6216\u91cd\u7f6e\u73af\u5883$NC\"\n    Write-Host \"$YELLOW  \u2022 \u4fdd\u7559\u6240\u6709\u73b0\u6709\u914d\u7f6e\u548c\u6570\u636e$NC\"\n    Write-Host \"$YELLOW  \u2022 \u539f\u914d\u7f6e\u6587\u4ef6\u4f1a\u81ea\u52a8\u5907\u4efd$NC\"\n} else {\n    Write-Host \"$GREEN\ud83d\udccb &#91;\u6267\u884c\u6d41\u7a0b]$NC \u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801\u6a21\u5f0f\u5c06\u6309\u4ee5\u4e0b\u6b65\u9aa4\u6267\u884c\uff1a\"\n    Write-Host \"$BLUE  1\ufe0f\u20e3  \u68c0\u6d4b\u5e76\u5173\u95edCursor\u8fdb\u7a0b$NC\"\n    Write-Host \"$BLUE  2\ufe0f\u20e3  \u4fdd\u5b58Cursor\u7a0b\u5e8f\u8def\u5f84\u4fe1\u606f$NC\"\n    Write-Host \"$BLUE  3\ufe0f\u20e3  \u5220\u9664\u6307\u5b9a\u7684Cursor\u8bd5\u7528\u76f8\u5173\u6587\u4ef6\u5939$NC\"\n    Write-Host \"$BLUE      \ud83d\udcc1 C:\\Users\\Administrator\\.cursor$NC\"\n    Write-Host \"$BLUE      \ud83d\udcc1 C:\\Users\\Administrator\\AppData\\Roaming\\Cursor$NC\"\n    Write-Host \"$BLUE      \ud83d\udcc1 C:\\Users\\%USERNAME%\\.cursor$NC\"\n    Write-Host \"$BLUE      \ud83d\udcc1 C:\\Users\\%USERNAME%\\AppData\\Roaming\\Cursor$NC\"\n    Write-Host \"$BLUE  3.5\ufe0f\u20e3 \u9884\u521b\u5efa\u5fc5\u8981\u76ee\u5f55\u7ed3\u6784\uff0c\u907f\u514d\u6743\u9650\u95ee\u9898$NC\"\n    Write-Host \"$BLUE  4\ufe0f\u20e3  \u91cd\u65b0\u542f\u52a8Cursor\u8ba9\u5176\u751f\u6210\u65b0\u7684\u914d\u7f6e\u6587\u4ef6$NC\"\n    Write-Host \"$BLUE  5\ufe0f\u20e3  \u7b49\u5f85\u914d\u7f6e\u6587\u4ef6\u751f\u6210\u5b8c\u6210\uff08\u6700\u591a45\u79d2\uff09$NC\"\n    Write-Host \"$BLUE  6\ufe0f\u20e3  \u5173\u95edCursor\u8fdb\u7a0b$NC\"\n    Write-Host \"$BLUE  7\ufe0f\u20e3  \u4fee\u6539\u65b0\u751f\u6210\u7684\u673a\u5668\u7801\u914d\u7f6e\u6587\u4ef6$NC\"\n    Write-Host \"$BLUE  8\ufe0f\u20e3  \u663e\u793a\u64cd\u4f5c\u5b8c\u6210\u7edf\u8ba1\u4fe1\u606f$NC\"\n    Write-Host \"\"\n    Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u6ce8\u610f\u4e8b\u9879]$NC\"\n    Write-Host \"$YELLOW  \u2022 \u811a\u672c\u6267\u884c\u8fc7\u7a0b\u4e2d\u8bf7\u52ff\u624b\u52a8\u64cd\u4f5cCursor$NC\"\n    Write-Host \"$YELLOW  \u2022 \u5efa\u8bae\u5728\u6267\u884c\u524d\u5173\u95ed\u6240\u6709Cursor\u7a97\u53e3$NC\"\n    Write-Host \"$YELLOW  \u2022 \u6267\u884c\u5b8c\u6210\u540e\u9700\u8981\u91cd\u65b0\u542f\u52a8Cursor$NC\"\n    Write-Host \"$YELLOW  \u2022 \u539f\u914d\u7f6e\u6587\u4ef6\u4f1a\u81ea\u52a8\u5907\u4efd\u5230backups\u6587\u4ef6\u5939$NC\"\n}\nWrite-Host \"\"\n\n# \ud83e\udd14 \u7528\u6237\u786e\u8ba4\nWrite-Host \"$GREEN\ud83e\udd14 &#91;\u786e\u8ba4]$NC \u8bf7\u786e\u8ba4\u60a8\u5df2\u4e86\u89e3\u4e0a\u8ff0\u6267\u884c\u6d41\u7a0b\"\n$confirmation = Read-Host \"\u662f\u5426\u7ee7\u7eed\u6267\u884c\uff1f(\u8f93\u5165 y \u6216 yes \u7ee7\u7eed\uff0c\u5176\u4ed6\u4efb\u610f\u952e\u9000\u51fa)\"\nif ($confirmation -notmatch \"^(y|yes)$\") {\n    Write-Host \"$YELLOW\ud83d\udc4b &#91;\u9000\u51fa]$NC \u7528\u6237\u53d6\u6d88\u6267\u884c\uff0c\u811a\u672c\u9000\u51fa\"\n    Read-Host \"\u6309\u56de\u8f66\u952e\u9000\u51fa\"\n    exit 0\n}\nWrite-Host \"$GREEN\u2705 &#91;\u786e\u8ba4]$NC \u7528\u6237\u786e\u8ba4\u7ee7\u7eed\u6267\u884c\"\nWrite-Host \"\"\n\n# \u83b7\u53d6\u5e76\u663e\u793a Cursor \u7248\u672c\nfunction Get-CursorVersion {\n    try {\n        # \u4e3b\u8981\u68c0\u6d4b\u8def\u5f84\n        $packagePath = \"$env:LOCALAPPDATA\\\\Programs\\\\cursor\\\\resources\\\\app\\\\package.json\"\n        \n        if (Test-Path $packagePath) {\n            $packageJson = Get-Content $packagePath -Raw | ConvertFrom-Json\n            if ($packageJson.version) {\n                Write-Host \"$GREEN&#91;\u4fe1\u606f]$NC \u5f53\u524d\u5b89\u88c5\u7684 Cursor \u7248\u672c: v$($packageJson.version)\"\n                return $packageJson.version\n            }\n        }\n\n        # \u5907\u7528\u8def\u5f84\u68c0\u6d4b\n        $altPath = \"$env:LOCALAPPDATA\\\\cursor\\\\resources\\\\app\\\\package.json\"\n        if (Test-Path $altPath) {\n            $packageJson = Get-Content $altPath -Raw | ConvertFrom-Json\n            if ($packageJson.version) {\n                Write-Host \"$GREEN&#91;\u4fe1\u606f]$NC \u5f53\u524d\u5b89\u88c5\u7684 Cursor \u7248\u672c: v$($packageJson.version)\"\n                return $packageJson.version\n            }\n        }\n\n        Write-Host \"$YELLOW&#91;\u8b66\u544a]$NC \u65e0\u6cd5\u68c0\u6d4b\u5230 Cursor \u7248\u672c\"\n        Write-Host \"$YELLOW&#91;\u63d0\u793a]$NC \u8bf7\u786e\u4fdd Cursor \u5df2\u6b63\u786e\u5b89\u88c5\"\n        return $null\n    }\n    catch {\n        Write-Host \"$RED&#91;\u9519\u8bef]$NC \u83b7\u53d6 Cursor \u7248\u672c\u5931\u8d25: $_\"\n        return $null\n    }\n}\n\n# \u83b7\u53d6\u5e76\u663e\u793a\u7248\u672c\u4fe1\u606f\n$cursorVersion = Get-CursorVersion\nWrite-Host \"\"\n\nWrite-Host \"$YELLOW\ud83d\udca1 &#91;\u91cd\u8981\u63d0\u793a]$NC \u6700\u65b0\u7684 1.0.x \u7248\u672c\u5df2\u652f\u6301\"\n\nWrite-Host \"\"\n\n# \ud83d\udd0d \u68c0\u67e5\u5e76\u5173\u95ed Cursor \u8fdb\u7a0b\nWrite-Host \"$GREEN\ud83d\udd0d &#91;\u68c0\u67e5]$NC \u6b63\u5728\u68c0\u67e5 Cursor \u8fdb\u7a0b...\"\n\nfunction Get-ProcessDetails {\n    param($processName)\n    Write-Host \"$BLUE\ud83d\udd0d &#91;\u8c03\u8bd5]$NC \u6b63\u5728\u83b7\u53d6 $processName \u8fdb\u7a0b\u8be6\u7ec6\u4fe1\u606f\uff1a\"\n    Get-WmiObject Win32_Process -Filter \"name='$processName'\" |\n        Select-Object ProcessId, ExecutablePath, CommandLine |\n        Format-List\n}\n\n# \u5b9a\u4e49\u6700\u5927\u91cd\u8bd5\u6b21\u6570\u548c\u7b49\u5f85\u65f6\u95f4\n$MAX_RETRIES = 5\n$WAIT_TIME = 1\n\n# \ud83d\udd04 \u5904\u7406\u8fdb\u7a0b\u5173\u95ed\u5e76\u4fdd\u5b58\u8fdb\u7a0b\u4fe1\u606f\nfunction Close-CursorProcessAndSaveInfo {\n    param($processName)\n\n    $global:CursorProcessInfo = $null\n\n    $processes = Get-Process -Name $processName -ErrorAction SilentlyContinue\n    if ($processes) {\n        Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u53d1\u73b0 $processName \u6b63\u5728\u8fd0\u884c\"\n\n        # \ud83d\udcbe \u4fdd\u5b58\u8fdb\u7a0b\u4fe1\u606f\u7528\u4e8e\u540e\u7eed\u91cd\u542f - \u4fee\u590d\uff1a\u786e\u4fdd\u83b7\u53d6\u5355\u4e2a\u8fdb\u7a0b\u8def\u5f84\n        $firstProcess = if ($processes -is &#91;array]) { $processes&#91;0] } else { $processes }\n        $processPath = $firstProcess.Path\n\n        # \u786e\u4fdd\u8def\u5f84\u662f\u5b57\u7b26\u4e32\u800c\u4e0d\u662f\u6570\u7ec4\n        if ($processPath -is &#91;array]) {\n            $processPath = $processPath&#91;0]\n        }\n\n        $global:CursorProcessInfo = @{\n            ProcessName = $firstProcess.ProcessName\n            Path = $processPath\n            StartTime = $firstProcess.StartTime\n        }\n        Write-Host \"$GREEN\ud83d\udcbe &#91;\u4fdd\u5b58]$NC \u5df2\u4fdd\u5b58\u8fdb\u7a0b\u4fe1\u606f: $($global:CursorProcessInfo.Path)\"\n\n        Get-ProcessDetails $processName\n\n        Write-Host \"$YELLOW\ud83d\udd04 &#91;\u64cd\u4f5c]$NC \u5c1d\u8bd5\u5173\u95ed $processName...\"\n        Stop-Process -Name $processName -Force\n\n        $retryCount = 0\n        while ($retryCount -lt $MAX_RETRIES) {\n            $process = Get-Process -Name $processName -ErrorAction SilentlyContinue\n            if (-not $process) { break }\n\n            $retryCount++\n            if ($retryCount -ge $MAX_RETRIES) {\n                Write-Host \"$RED\u274c &#91;\u9519\u8bef]$NC \u5728 $MAX_RETRIES \u6b21\u5c1d\u8bd5\u540e\u4ecd\u65e0\u6cd5\u5173\u95ed $processName\"\n                Get-ProcessDetails $processName\n                Write-Host \"$RED\ud83d\udca5 &#91;\u9519\u8bef]$NC \u8bf7\u624b\u52a8\u5173\u95ed\u8fdb\u7a0b\u540e\u91cd\u8bd5\"\n                Read-Host \"\u6309\u56de\u8f66\u952e\u9000\u51fa\"\n                exit 1\n            }\n            Write-Host \"$YELLOW\u23f3 &#91;\u7b49\u5f85]$NC \u7b49\u5f85\u8fdb\u7a0b\u5173\u95ed\uff0c\u5c1d\u8bd5 $retryCount\/$MAX_RETRIES...\"\n            Start-Sleep -Seconds $WAIT_TIME\n        }\n        Write-Host \"$GREEN\u2705 &#91;\u6210\u529f]$NC $processName \u5df2\u6210\u529f\u5173\u95ed\"\n    } else {\n        Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u672a\u53d1\u73b0 $processName \u8fdb\u7a0b\u8fd0\u884c\"\n        # \u5c1d\u8bd5\u627e\u5230Cursor\u7684\u5b89\u88c5\u8def\u5f84\n        $cursorPaths = @(\n            \"$env:LOCALAPPDATA\\Programs\\cursor\\Cursor.exe\",\n            \"$env:PROGRAMFILES\\Cursor\\Cursor.exe\",\n            \"$env:PROGRAMFILES(X86)\\Cursor\\Cursor.exe\"\n        )\n\n        foreach ($path in $cursorPaths) {\n            if (Test-Path $path) {\n                $global:CursorProcessInfo = @{\n                    ProcessName = \"Cursor\"\n                    Path = $path\n                    StartTime = $null\n                }\n                Write-Host \"$GREEN\ud83d\udcbe &#91;\u53d1\u73b0]$NC \u627e\u5230Cursor\u5b89\u88c5\u8def\u5f84: $path\"\n                break\n            }\n        }\n\n        if (-not $global:CursorProcessInfo) {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u672a\u627e\u5230Cursor\u5b89\u88c5\u8def\u5f84\uff0c\u5c06\u4f7f\u7528\u9ed8\u8ba4\u8def\u5f84\"\n            $global:CursorProcessInfo = @{\n                ProcessName = \"Cursor\"\n                Path = \"$env:LOCALAPPDATA\\Programs\\cursor\\Cursor.exe\"\n                StartTime = $null\n            }\n        }\n    }\n}\n\n# \ufffd\ufe0f \u786e\u4fdd\u5907\u4efd\u76ee\u5f55\u5b58\u5728\nif (-not (Test-Path $BACKUP_DIR)) {\n    try {\n        New-Item -ItemType Directory -Path $BACKUP_DIR -Force | Out-Null\n        Write-Host \"$GREEN\u2705 &#91;\u5907\u4efd\u76ee\u5f55]$NC \u5907\u4efd\u76ee\u5f55\u521b\u5efa\u6210\u529f: $BACKUP_DIR\"\n    } catch {\n        Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u8b66\u544a]$NC \u5907\u4efd\u76ee\u5f55\u521b\u5efa\u5931\u8d25: $($_.Exception.Message)\"\n    }\n}\n\n# \ufffd\ud83d\ude80 \u6839\u636e\u7528\u6237\u9009\u62e9\u6267\u884c\u76f8\u5e94\u529f\u80fd\nif ($executeMode -eq \"MODIFY_ONLY\") {\n    Write-Host \"$GREEN\ud83d\ude80 &#91;\u5f00\u59cb]$NC \u5f00\u59cb\u6267\u884c\u4ec5\u4fee\u6539\u673a\u5668\u7801\u529f\u80fd...\"\n\n    # \u5148\u8fdb\u884c\u73af\u5883\u68c0\u67e5\n    $envCheck = Test-CursorEnvironment -Mode \"MODIFY_ONLY\"\n    if (-not $envCheck.Success) {\n        Write-Host \"\"\n        Write-Host \"$RED\u274c &#91;\u73af\u5883\u68c0\u67e5\u5931\u8d25]$NC \u65e0\u6cd5\u7ee7\u7eed\u6267\u884c\uff0c\u53d1\u73b0\u4ee5\u4e0b\u95ee\u9898\uff1a\"\n        foreach ($issue in $envCheck.Issues) {\n            Write-Host \"$RED  \u2022 ${issue}$NC\"\n        }\n        Write-Host \"\"\n        Write-Host \"$YELLOW\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u8bf7\u9009\u62e9\u4ee5\u4e0b\u64cd\u4f5c\uff1a\"\n        Write-Host \"$BLUE  1\ufe0f\u20e3  \u9009\u62e9'\u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801'\u9009\u9879\uff08\u63a8\u8350\uff09$NC\"\n        Write-Host \"$BLUE  2\ufe0f\u20e3  \u624b\u52a8\u542f\u52a8Cursor\u4e00\u6b21\uff0c\u7136\u540e\u91cd\u65b0\u8fd0\u884c\u811a\u672c$NC\"\n        Write-Host \"$BLUE  3\ufe0f\u20e3  \u68c0\u67e5Cursor\u662f\u5426\u6b63\u786e\u5b89\u88c5$NC\"\n        Write-Host \"\"\n        Read-Host \"\u6309\u56de\u8f66\u952e\u9000\u51fa\"\n        exit 1\n    }\n\n    # \u6267\u884c\u673a\u5668\u7801\u4fee\u6539\n    $configSuccess = Modify-MachineCodeConfig -Mode \"MODIFY_ONLY\"\n\n    if ($configSuccess) {\n        Write-Host \"\"\n        Write-Host \"$GREEN\ud83c\udf89 &#91;\u914d\u7f6e\u6587\u4ef6]$NC \u673a\u5668\u7801\u914d\u7f6e\u6587\u4ef6\u4fee\u6539\u5b8c\u6210\uff01\"\n\n        # \u6dfb\u52a0\u6ce8\u518c\u8868\u4fee\u6539\n        Write-Host \"$BLUE\ud83d\udd27 &#91;\u6ce8\u518c\u8868]$NC \u6b63\u5728\u4fee\u6539\u7cfb\u7edf\u6ce8\u518c\u8868...\"\n        $registrySuccess = Update-MachineGuid\n\n        # \ud83d\udd27 \u65b0\u589e\uff1aJavaScript\u6ce8\u5165\u529f\u80fd\uff08\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\u589e\u5f3a\uff09\n        Write-Host \"\"\n        Write-Host \"$BLUE\ud83d\udd27 &#91;\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7]$NC \u6b63\u5728\u6267\u884cJavaScript\u6ce8\u5165\u529f\u80fd...\"\n        Write-Host \"$BLUE\ud83d\udca1 &#91;\u8bf4\u660e]$NC \u6b64\u529f\u80fd\u5c06\u76f4\u63a5\u4fee\u6539Cursor\u5185\u6838JS\u6587\u4ef6\uff0c\u5b9e\u73b0\u66f4\u6df1\u5c42\u7684\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\"\n        $jsSuccess = Modify-CursorJSFiles\n\n        if ($registrySuccess) {\n            Write-Host \"$GREEN\u2705 &#91;\u6ce8\u518c\u8868]$NC \u7cfb\u7edf\u6ce8\u518c\u8868\u4fee\u6539\u6210\u529f\"\n\n            if ($jsSuccess) {\n                Write-Host \"$GREEN\u2705 &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u6210\u529f\"\n                Write-Host \"\"\n                Write-Host \"$GREEN\ud83c\udf89 &#91;\u5b8c\u6210]$NC \u6240\u6709\u673a\u5668\u7801\u4fee\u6539\u5b8c\u6210\uff08\u589e\u5f3a\u7248\uff09\uff01\"\n                Write-Host \"$BLUE\ud83d\udccb &#91;\u8be6\u60c5]$NC \u5df2\u5b8c\u6210\u4ee5\u4e0b\u4fee\u6539\uff1a\"\n                Write-Host \"$GREEN  \u2713 Cursor \u914d\u7f6e\u6587\u4ef6 (storage.json)$NC\"\n                Write-Host \"$GREEN  \u2713 \u7cfb\u7edf\u6ce8\u518c\u8868 (MachineGuid)$NC\"\n                Write-Host \"$GREEN  \u2713 JavaScript\u5185\u6838\u6ce8\u5165\uff08\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\uff09$NC\"\n            } else {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u5931\u8d25\uff0c\u4f46\u5176\u4ed6\u529f\u80fd\u6210\u529f\"\n                Write-Host \"\"\n                Write-Host \"$GREEN\ud83c\udf89 &#91;\u5b8c\u6210]$NC \u6240\u6709\u673a\u5668\u7801\u4fee\u6539\u5b8c\u6210\uff01\"\n                Write-Host \"$BLUE\ud83d\udccb &#91;\u8be6\u60c5]$NC \u5df2\u5b8c\u6210\u4ee5\u4e0b\u4fee\u6539\uff1a\"\n                Write-Host \"$GREEN  \u2713 Cursor \u914d\u7f6e\u6587\u4ef6 (storage.json)$NC\"\n                Write-Host \"$GREEN  \u2713 \u7cfb\u7edf\u6ce8\u518c\u8868 (MachineGuid)$NC\"\n                Write-Host \"$YELLOW  \u26a0 JavaScript\u5185\u6838\u6ce8\u5165\uff08\u90e8\u5206\u5931\u8d25\uff09$NC\"\n            }\n\n            # \ud83d\udd12 \u6dfb\u52a0\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4\u673a\u5236\n            Write-Host \"$BLUE\ud83d\udd12 &#91;\u4fdd\u62a4]$NC \u6b63\u5728\u8bbe\u7f6e\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4...\"\n            try {\n                $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n                $configFile = Get-Item $configPath\n                $configFile.IsReadOnly = $true\n                Write-Host \"$GREEN\u2705 &#91;\u4fdd\u62a4]$NC \u914d\u7f6e\u6587\u4ef6\u5df2\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\uff0c\u9632\u6b62Cursor\u8986\u76d6\u4fee\u6539\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u6587\u4ef6\u8def\u5f84: $configPath\"\n            } catch {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u4fdd\u62a4]$NC \u8bbe\u7f6e\u53ea\u8bfb\u5c5e\u6027\u5931\u8d25: $($_.Exception.Message)\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u624b\u52a8\u53f3\u952e\u6587\u4ef6 \u2192 \u5c5e\u6027 \u2192 \u52fe\u9009'\u53ea\u8bfb'\"\n            }\n        } else {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u6ce8\u518c\u8868]$NC \u6ce8\u518c\u8868\u4fee\u6539\u5931\u8d25\uff0c\u4f46\u914d\u7f6e\u6587\u4ef6\u4fee\u6539\u6210\u529f\"\n\n            if ($jsSuccess) {\n                Write-Host \"$GREEN\u2705 &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u6210\u529f\"\n                Write-Host \"\"\n                Write-Host \"$YELLOW\ud83c\udf89 &#91;\u90e8\u5206\u5b8c\u6210]$NC \u914d\u7f6e\u6587\u4ef6\u548cJavaScript\u6ce8\u5165\u5b8c\u6210\uff0c\u6ce8\u518c\u8868\u4fee\u6539\u5931\u8d25\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u80fd\u9700\u8981\u7ba1\u7406\u5458\u6743\u9650\u6765\u4fee\u6539\u6ce8\u518c\u8868\"\n                Write-Host \"$BLUE\ud83d\udccb &#91;\u8be6\u60c5]$NC \u5df2\u5b8c\u6210\u4ee5\u4e0b\u4fee\u6539\uff1a\"\n                Write-Host \"$GREEN  \u2713 Cursor \u914d\u7f6e\u6587\u4ef6 (storage.json)$NC\"\n                Write-Host \"$YELLOW  \u26a0 \u7cfb\u7edf\u6ce8\u518c\u8868 (MachineGuid) - \u5931\u8d25$NC\"\n                Write-Host \"$GREEN  \u2713 JavaScript\u5185\u6838\u6ce8\u5165\uff08\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\uff09$NC\"\n            } else {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u5931\u8d25\"\n                Write-Host \"\"\n                Write-Host \"$YELLOW\ud83c\udf89 &#91;\u90e8\u5206\u5b8c\u6210]$NC \u914d\u7f6e\u6587\u4ef6\u4fee\u6539\u5b8c\u6210\uff0c\u6ce8\u518c\u8868\u548cJavaScript\u6ce8\u5165\u5931\u8d25\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u80fd\u9700\u8981\u7ba1\u7406\u5458\u6743\u9650\u6765\u4fee\u6539\u6ce8\u518c\u8868\"\n            }\n\n            # \ud83d\udd12 \u5373\u4f7f\u6ce8\u518c\u8868\u4fee\u6539\u5931\u8d25\uff0c\u4e5f\u8981\u4fdd\u62a4\u914d\u7f6e\u6587\u4ef6\n            Write-Host \"$BLUE\ud83d\udd12 &#91;\u4fdd\u62a4]$NC \u6b63\u5728\u8bbe\u7f6e\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4...\"\n            try {\n                $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n                $configFile = Get-Item $configPath\n                $configFile.IsReadOnly = $true\n                Write-Host \"$GREEN\u2705 &#91;\u4fdd\u62a4]$NC \u914d\u7f6e\u6587\u4ef6\u5df2\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\uff0c\u9632\u6b62Cursor\u8986\u76d6\u4fee\u6539\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u6587\u4ef6\u8def\u5f84: $configPath\"\n            } catch {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u4fdd\u62a4]$NC \u8bbe\u7f6e\u53ea\u8bfb\u5c5e\u6027\u5931\u8d25: $($_.Exception.Message)\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u624b\u52a8\u53f3\u952e\u6587\u4ef6 \u2192 \u5c5e\u6027 \u2192 \u52fe\u9009'\u53ea\u8bfb'\"\n            }\n        }\n\n        Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u73b0\u5728\u53ef\u4ee5\u542f\u52a8Cursor\u4f7f\u7528\u65b0\u7684\u673a\u5668\u7801\u914d\u7f6e\"\n    } else {\n        Write-Host \"\"\n        Write-Host \"$RED\u274c &#91;\u5931\u8d25]$NC \u673a\u5668\u7801\u4fee\u6539\u5931\u8d25\uff01\"\n        Write-Host \"$YELLOW\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u8bf7\u5c1d\u8bd5'\u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801'\u9009\u9879\"\n    }\n} else {\n    # \u5b8c\u6574\u7684\u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801\u6d41\u7a0b\n    Write-Host \"$GREEN\ud83d\ude80 &#91;\u5f00\u59cb]$NC \u5f00\u59cb\u6267\u884c\u91cd\u7f6e\u73af\u5883+\u4fee\u6539\u673a\u5668\u7801\u529f\u80fd...\"\n\n    # \ud83d\ude80 \u5173\u95ed\u6240\u6709 Cursor \u8fdb\u7a0b\u5e76\u4fdd\u5b58\u4fe1\u606f\n    Close-CursorProcessAndSaveInfo \"Cursor\"\n    if (-not $global:CursorProcessInfo) {\n        Close-CursorProcessAndSaveInfo \"cursor\"\n    }\n\n    # \ud83d\udea8 \u91cd\u8981\u8b66\u544a\u63d0\u793a\n    Write-Host \"\"\n    Write-Host \"$RED\ud83d\udea8 &#91;\u91cd\u8981\u8b66\u544a]$NC ============================================\"\n    Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u98ce\u63a7\u63d0\u9192]$NC Cursor \u98ce\u63a7\u673a\u5236\u975e\u5e38\u4e25\u683c\uff01\"\n    Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u5fc5\u987b\u5220\u9664]$NC \u5fc5\u987b\u5b8c\u5168\u5220\u9664\u6307\u5b9a\u6587\u4ef6\u5939\uff0c\u4e0d\u80fd\u6709\u4efb\u4f55\u6b8b\u7559\u8bbe\u7f6e\"\n    Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u9632\u6389\u8bd5\u7528]$NC \u53ea\u6709\u5f7b\u5e95\u6e05\u7406\u624d\u80fd\u6709\u6548\u9632\u6b62\u6389\u8bd5\u7528Pro\u72b6\u6001\"\n    Write-Host \"$RED\ud83d\udea8 &#91;\u91cd\u8981\u8b66\u544a]$NC ============================================\"\n    Write-Host \"\"\n\n    # \ud83c\udfaf \u6267\u884c Cursor \u9632\u6389\u8bd5\u7528Pro\u5220\u9664\u6587\u4ef6\u5939\u529f\u80fd\n    Write-Host \"$GREEN\ud83d\ude80 &#91;\u5f00\u59cb]$NC \u5f00\u59cb\u6267\u884c\u6838\u5fc3\u529f\u80fd...\"\n    Remove-CursorTrialFolders\n\n\n\n    # \ud83d\udd04 \u91cd\u542fCursor\u8ba9\u5176\u91cd\u65b0\u751f\u6210\u914d\u7f6e\u6587\u4ef6\n    Restart-CursorAndWait\n\n    # \ud83d\udee0\ufe0f \u4fee\u6539\u673a\u5668\u7801\u914d\u7f6e\n    $configSuccess = Modify-MachineCodeConfig\n    \n    # \ud83e\uddf9 \u6267\u884c Cursor \u521d\u59cb\u5316\u6e05\u7406\n    Invoke-CursorInitialization\n\n    if ($configSuccess) {\n        Write-Host \"\"\n        Write-Host \"$GREEN\ud83c\udf89 &#91;\u914d\u7f6e\u6587\u4ef6]$NC \u673a\u5668\u7801\u914d\u7f6e\u6587\u4ef6\u4fee\u6539\u5b8c\u6210\uff01\"\n\n        # \u6dfb\u52a0\u6ce8\u518c\u8868\u4fee\u6539\n        Write-Host \"$BLUE\ud83d\udd27 &#91;\u6ce8\u518c\u8868]$NC \u6b63\u5728\u4fee\u6539\u7cfb\u7edf\u6ce8\u518c\u8868...\"\n        $registrySuccess = Update-MachineGuid\n\n        # \ud83d\udd27 \u65b0\u589e\uff1aJavaScript\u6ce8\u5165\u529f\u80fd\uff08\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\u589e\u5f3a\uff09\n        Write-Host \"\"\n        Write-Host \"$BLUE\ud83d\udd27 &#91;\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7]$NC \u6b63\u5728\u6267\u884cJavaScript\u6ce8\u5165\u529f\u80fd...\"\n        Write-Host \"$BLUE\ud83d\udca1 &#91;\u8bf4\u660e]$NC \u6b64\u529f\u80fd\u5c06\u76f4\u63a5\u4fee\u6539Cursor\u5185\u6838JS\u6587\u4ef6\uff0c\u5b9e\u73b0\u66f4\u6df1\u5c42\u7684\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\"\n        $jsSuccess = Modify-CursorJSFiles\n\n        if ($registrySuccess) {\n            Write-Host \"$GREEN\u2705 &#91;\u6ce8\u518c\u8868]$NC \u7cfb\u7edf\u6ce8\u518c\u8868\u4fee\u6539\u6210\u529f\"\n\n            if ($jsSuccess) {\n                Write-Host \"$GREEN\u2705 &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u6210\u529f\"\n                Write-Host \"\"\n                Write-Host \"$GREEN\ud83c\udf89 &#91;\u5b8c\u6210]$NC \u6240\u6709\u64cd\u4f5c\u5b8c\u6210\uff08\u589e\u5f3a\u7248\uff09\uff01\"\n                Write-Host \"$BLUE\ud83d\udccb &#91;\u8be6\u60c5]$NC \u5df2\u5b8c\u6210\u4ee5\u4e0b\u64cd\u4f5c\uff1a\"\n                Write-Host \"$GREEN  \u2713 \u5220\u9664 Cursor \u8bd5\u7528\u76f8\u5173\u6587\u4ef6\u5939$NC\"\n                Write-Host \"$GREEN  \u2713 Cursor \u521d\u59cb\u5316\u6e05\u7406$NC\"\n                Write-Host \"$GREEN  \u2713 \u91cd\u65b0\u751f\u6210\u914d\u7f6e\u6587\u4ef6$NC\"\n                Write-Host \"$GREEN  \u2713 \u4fee\u6539\u673a\u5668\u7801\u914d\u7f6e$NC\"\n                Write-Host \"$GREEN  \u2713 \u4fee\u6539\u7cfb\u7edf\u6ce8\u518c\u8868$NC\"\n                Write-Host \"$GREEN  \u2713 JavaScript\u5185\u6838\u6ce8\u5165\uff08\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\uff09$NC\"\n            } else {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u5931\u8d25\uff0c\u4f46\u5176\u4ed6\u529f\u80fd\u6210\u529f\"\n                Write-Host \"\"\n                Write-Host \"$GREEN\ud83c\udf89 &#91;\u5b8c\u6210]$NC \u6240\u6709\u64cd\u4f5c\u5b8c\u6210\uff01\"\n                Write-Host \"$BLUE\ud83d\udccb &#91;\u8be6\u60c5]$NC \u5df2\u5b8c\u6210\u4ee5\u4e0b\u64cd\u4f5c\uff1a\"\n                Write-Host \"$GREEN  \u2713 \u5220\u9664 Cursor \u8bd5\u7528\u76f8\u5173\u6587\u4ef6\u5939$NC\"\n                Write-Host \"$GREEN  \u2713 Cursor \u521d\u59cb\u5316\u6e05\u7406$NC\"\n                Write-Host \"$GREEN  \u2713 \u91cd\u65b0\u751f\u6210\u914d\u7f6e\u6587\u4ef6$NC\"\n                Write-Host \"$GREEN  \u2713 \u4fee\u6539\u673a\u5668\u7801\u914d\u7f6e$NC\"\n                Write-Host \"$GREEN  \u2713 \u4fee\u6539\u7cfb\u7edf\u6ce8\u518c\u8868$NC\"\n                Write-Host \"$YELLOW  \u26a0 JavaScript\u5185\u6838\u6ce8\u5165\uff08\u90e8\u5206\u5931\u8d25\uff09$NC\"\n            }\n\n            # \ud83d\udd12 \u6dfb\u52a0\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4\u673a\u5236\n            Write-Host \"$BLUE\ud83d\udd12 &#91;\u4fdd\u62a4]$NC \u6b63\u5728\u8bbe\u7f6e\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4...\"\n            try {\n                $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n                $configFile = Get-Item $configPath\n                $configFile.IsReadOnly = $true\n                Write-Host \"$GREEN\u2705 &#91;\u4fdd\u62a4]$NC \u914d\u7f6e\u6587\u4ef6\u5df2\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\uff0c\u9632\u6b62Cursor\u8986\u76d6\u4fee\u6539\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u6587\u4ef6\u8def\u5f84: $configPath\"\n            } catch {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u4fdd\u62a4]$NC \u8bbe\u7f6e\u53ea\u8bfb\u5c5e\u6027\u5931\u8d25: $($_.Exception.Message)\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u624b\u52a8\u53f3\u952e\u6587\u4ef6 \u2192 \u5c5e\u6027 \u2192 \u52fe\u9009'\u53ea\u8bfb'\"\n            }\n        } else {\n            Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u6ce8\u518c\u8868]$NC \u6ce8\u518c\u8868\u4fee\u6539\u5931\u8d25\uff0c\u4f46\u5176\u4ed6\u64cd\u4f5c\u6210\u529f\"\n\n            if ($jsSuccess) {\n                Write-Host \"$GREEN\u2705 &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u6210\u529f\"\n                Write-Host \"\"\n                Write-Host \"$YELLOW\ud83c\udf89 &#91;\u90e8\u5206\u5b8c\u6210]$NC \u5927\u90e8\u5206\u64cd\u4f5c\u5b8c\u6210\uff0c\u6ce8\u518c\u8868\u4fee\u6539\u5931\u8d25\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u80fd\u9700\u8981\u7ba1\u7406\u5458\u6743\u9650\u6765\u4fee\u6539\u6ce8\u518c\u8868\"\n                Write-Host \"$BLUE\ud83d\udccb &#91;\u8be6\u60c5]$NC \u5df2\u5b8c\u6210\u4ee5\u4e0b\u64cd\u4f5c\uff1a\"\n                Write-Host \"$GREEN  \u2713 \u5220\u9664 Cursor \u8bd5\u7528\u76f8\u5173\u6587\u4ef6\u5939$NC\"\n                Write-Host \"$GREEN  \u2713 Cursor \u521d\u59cb\u5316\u6e05\u7406$NC\"\n                Write-Host \"$GREEN  \u2713 \u91cd\u65b0\u751f\u6210\u914d\u7f6e\u6587\u4ef6$NC\"\n                Write-Host \"$GREEN  \u2713 \u4fee\u6539\u673a\u5668\u7801\u914d\u7f6e$NC\"\n                Write-Host \"$YELLOW  \u26a0 \u4fee\u6539\u7cfb\u7edf\u6ce8\u518c\u8868 - \u5931\u8d25$NC\"\n                Write-Host \"$GREEN  \u2713 JavaScript\u5185\u6838\u6ce8\u5165\uff08\u8bbe\u5907\u8bc6\u522b\u7ed5\u8fc7\uff09$NC\"\n            } else {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;JavaScript\u6ce8\u5165]$NC JavaScript\u6ce8\u5165\u529f\u80fd\u6267\u884c\u5931\u8d25\"\n                Write-Host \"\"\n                Write-Host \"$YELLOW\ud83c\udf89 &#91;\u90e8\u5206\u5b8c\u6210]$NC \u5927\u90e8\u5206\u64cd\u4f5c\u5b8c\u6210\uff0c\u6ce8\u518c\u8868\u548cJavaScript\u6ce8\u5165\u5931\u8d25\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u80fd\u9700\u8981\u7ba1\u7406\u5458\u6743\u9650\u6765\u4fee\u6539\u6ce8\u518c\u8868\"\n            }\n\n            # \ud83d\udd12 \u5373\u4f7f\u6ce8\u518c\u8868\u4fee\u6539\u5931\u8d25\uff0c\u4e5f\u8981\u4fdd\u62a4\u914d\u7f6e\u6587\u4ef6\n            Write-Host \"$BLUE\ud83d\udd12 &#91;\u4fdd\u62a4]$NC \u6b63\u5728\u8bbe\u7f6e\u914d\u7f6e\u6587\u4ef6\u4fdd\u62a4...\"\n            try {\n                $configPath = \"$env:APPDATA\\Cursor\\User\\globalStorage\\storage.json\"\n                $configFile = Get-Item $configPath\n                $configFile.IsReadOnly = $true\n                Write-Host \"$GREEN\u2705 &#91;\u4fdd\u62a4]$NC \u914d\u7f6e\u6587\u4ef6\u5df2\u8bbe\u7f6e\u4e3a\u53ea\u8bfb\uff0c\u9632\u6b62Cursor\u8986\u76d6\u4fee\u6539\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u6587\u4ef6\u8def\u5f84: $configPath\"\n            } catch {\n                Write-Host \"$YELLOW\u26a0\ufe0f  &#91;\u4fdd\u62a4]$NC \u8bbe\u7f6e\u53ea\u8bfb\u5c5e\u6027\u5931\u8d25: $($_.Exception.Message)\"\n                Write-Host \"$BLUE\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u53ef\u624b\u52a8\u53f3\u952e\u6587\u4ef6 \u2192 \u5c5e\u6027 \u2192 \u52fe\u9009'\u53ea\u8bfb'\"\n            }\n        }\n    } else {\n        Write-Host \"\"\n        Write-Host \"$RED\u274c &#91;\u5931\u8d25]$NC \u673a\u5668\u7801\u914d\u7f6e\u4fee\u6539\u5931\u8d25\uff01\"\n        Write-Host \"$YELLOW\ud83d\udca1 &#91;\u5efa\u8bae]$NC \u8bf7\u68c0\u67e5\u9519\u8bef\u4fe1\u606f\u5e76\u91cd\u8bd5\"\n    }\n}\n\n\n# \ud83d\udcf1 \u663e\u793a\u516c\u4f17\u53f7\u4fe1\u606f\nWrite-Host \"\"\nWrite-Host \"$GREEN================================$NC\"\nWrite-Host \"$YELLOW\ud83d\udcf1  \u5173\u6ce8\u516c\u4f17\u53f7\u3010\u714e\u997c\u679c\u5b50\u5377AI\u3011\u4e00\u8d77\u4ea4\u6d41\u66f4\u591aCursor\u6280\u5de7\u548cAI\u77e5\u8bc6(\u811a\u672c\u514d\u8d39\u3001\u5173\u6ce8\u516c\u4f17\u53f7\u52a0\u7fa4\u6709\u66f4\u591a\u6280\u5de7\u548c\u5927\u4f6c)  $NC\"\nWrite-Host \"$GREEN================================$NC\"\nWrite-Host \"\"\n\n# \ud83c\udf89 \u811a\u672c\u6267\u884c\u5b8c\u6210\nWrite-Host \"$GREEN\ud83c\udf89 &#91;\u811a\u672c\u5b8c\u6210]$NC \u611f\u8c22\u4f7f\u7528 Cursor \u673a\u5668\u7801\u4fee\u6539\u5de5\u5177\uff01\"\nWrite-Host \"$BLUE\ud83d\udca1 &#91;\u63d0\u793a]$NC \u5982\u6709\u95ee\u9898\u8bf7\u53c2\u8003\u516c\u4f17\u53f7\u6216\u91cd\u65b0\u8fd0\u884c\u811a\u672c\"\nWrite-Host \"\"\nRead-Host \"\u6309\u56de\u8f66\u952e\u9000\u51fa\"\nexit 0<\/code><\/pre>\n\n\n\n<p>4.\u4ee5\u7ba1\u7406\u5458\u8eab\u4efd\u8fd0\u884c\uff0c\u91cd\u65b0\u767b\u9646\u81ea\u5df1\u7684\u8d26\u53f7\u5373\u53ef<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e8b\u5148\u58f0\u660e\u5237\u591a\u4e86\u4f1a\u5c01\uff0c\u522b\u602a\u6211\u3002 Cursor &#8211; The AI Code Editor\u524d\u5f80\u4e0b\u8f7dcur [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":72,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-67","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1"],"_links":{"self":[{"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/posts\/67","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/comments?post=67"}],"version-history":[{"count":1,"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/posts\/67\/revisions"}],"predecessor-version":[{"id":68,"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/posts\/67\/revisions\/68"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/media\/72"}],"wp:attachment":[{"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/media?parent=67"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/categories?post=67"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lichengkun.com\/index.php\/wp-json\/wp\/v2\/tags?post=67"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}