# WPORT AI 課程 ── 課前一鍵安裝(Windows 10 / 11) # # 用法:開始 → 搜「PowerShell」→ 打開 → 整行貼上按 Enter(一定要 PowerShell,「命令提示字元」cmd 跑不了): # [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072; irm https://wport.me/learn/setup-win.ps1 | iex # 前半段是打開 TLS 1.2:Windows 內建的 PowerShell 5.1 有些電腦預設沒開,連 https 會直接「連接意外關閉」。 # # 做的事: # 1. 確認有 winget(Windows 內建的軟體管理員) # 2. winget 安裝 Git、GitHub CLI(gh)、Node.js LTS、Obsidian、OpenCode(桌面版+終端機版)、Claude Code、Orca(已經有的會跳過) # Git、Node.js 會跳出「要允許這個 App 變更您的裝置嗎?」(要管理員同意),按「是」;學校電腦要密碼就找助教。 # 3. 印出版本,確認都裝好了 # 重跑沒關係:裝過的會跳過或更新。 # 想先看會做什麼:先打 $env:DRY_RUN = 1,再跑上面那行,就只印指令不執行。 # # 課前準備頁:https://wport.me/services/ai-training/prepare $ErrorActionPreference = "Continue" # 後面 winget 也要連 https,這裡再開一次 TLS 1.2(貼的那行已經開過的話沒差) [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072 $DryRun = -not [string]::IsNullOrEmpty($env:DRY_RUN) function Step($text) { Write-Host "`n> $text" -ForegroundColor Cyan } function Ok($text) { Write-Host " [OK] $text" -ForegroundColor Green } function Warn($text) { Write-Host " [!] $text" -ForegroundColor Yellow } $failed = @() Step "1/3 winget(Windows 內建的軟體管理員)" if (-not (Get-Command winget -ErrorAction SilentlyContinue)) { Warn "這台電腦沒有 winget。到 Microsoft Store 搜「App Installer」(應用程式安裝程式)更新後再跑一次;" Warn "或照課前準備頁逐一下載安裝檔:https://wport.me/services/ai-training/prepare#tools" return } Ok ("winget " + (winget --version)) Step "2/3 安裝工具(已經有的會跳過)" Write-Host " Git、Node.js 會跳出「要允許這個 App 變更您的裝置嗎?」,按「是」。要密碼的話不要硬試,找助教。" -ForegroundColor Yellow $apps = @( @{ Id = "Git.Git"; Name = "Git" }, @{ Id = "GitHub.cli"; Name = "GitHub CLI(gh)" }, @{ Id = "OpenJS.NodeJS.LTS"; Name = "Node.js LTS" }, @{ Id = "Obsidian.Obsidian"; Name = "Obsidian" }, @{ Id = "SST.OpenCodeDesktop"; Name = "OpenCode 桌面版" }, @{ Id = "SST.opencode"; Name = "opencode(終端機版,Orca 用它叫 OpenCode)" }, @{ Id = "Anthropic.ClaudeCode"; Name = "Claude Code" }, @{ Id = "StablyAI.Orca"; Name = "Orca" } ) foreach ($app in $apps) { Write-Host (" - " + $app.Name) if ($DryRun) { Write-Host (" [只印不跑] winget install --id " + $app.Id + " --exact"); continue } winget install --id $app.Id --exact --accept-package-agreements --accept-source-agreements switch ($LASTEXITCODE) { 0 { Ok ($app.Name + " 好了") } -1978335189 { Ok ($app.Name + " 已經是最新版,跳過") } # 0x8A15002B:已安裝、沒有可用更新 -1978335135 { Ok ($app.Name + " 已經裝了,跳過") } # 0x8A150061:已安裝 default { Warn ($app.Name + " 沒裝成功(代碼 " + $LASTEXITCODE + ")。先跳過,最後把這個畫面截圖。"); $failed += $app.Name } } } Step "3/3 檢查" # 剛裝好的程式還沒進這個視窗的 PATH,重新讀一次 $env:Path = [Environment]::GetEnvironmentVariable("Path", "Machine") + ";" + [Environment]::GetEnvironmentVariable("Path", "User") foreach ($cmd in @("git", "gh", "node", "claude", "opencode")) { if (Get-Command $cmd -ErrorAction SilentlyContinue) { Ok ("$cmd " + (& $cmd --version)) } else { Warn "$cmd 還找不到:把 PowerShell 關掉重開,再打 $cmd --version 試一次" } } Write-Host "" if ($failed.Count -gt 0) { Warn ("沒裝成功:" + ($failed -join "、") + "。把這個視窗截圖,貼給 ChatGPT/Gemini 或助教;其他的都好了,不影響上課。") Warn "學校電腦如果跳出要「系統管理員」密碼,不要硬裝,找助教。" } else { Ok "全部裝好了。" } Write-Host "接下來:到 https://github.com/signup 用個人信箱註冊 GitHub 帳號(學校信箱畢業後會失效;要申請學生方案再把學校信箱加進去)。" Write-Host "卡住了看這裡:https://wport.me/services/ai-training/prepare#troubles"