@echo off
:: ==========================================
:: 自動提升為系統管理員權限
:: ==========================================
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    echo 正在要求系統管理員權限...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /b

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%~dp0"

chcp 65001 >nul
title 系統自動啟用與清理工具
echo ===================================================
echo 正在執行自動啟用作業，請稍候...
echo ===================================================
echo.

:: ==========================================
:: 0. 清除電腦內舊的 KMS 設定 (支援多版本共存)
:: ==========================================
echo [前置作業] 正在清除殘留的舊 KMS 伺服器設定...
call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ckms >nul
call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /cpky >nul

:: 依序檢查並清理 Office 2024/2019/2016 (Office16)、2013 (Office15)、2010 (Office14)
for %%v in (Office16 Office15 Office14) do (
    if exist "C:\Program Files\Microsoft Office\%%v\ospp.vbs" (
        cd /d "C:\Program Files\Microsoft Office\%%v"
        call %windir%\system32\cscript.exe ospp.vbs /remhst >nul
    )
    if exist "C:\Program Files (x86)\Microsoft Office\%%v\ospp.vbs" (
        cd /d "C:\Program Files (x86)\Microsoft Office\%%v"
        call %windir%\system32\cscript.exe ospp.vbs /remhst >nul
    )
)
pushd "%~dp0"
echo.

:: ==========================================
:: 1. 網路校時
:: ==========================================
echo [步驟 1/5] 正在進行時間同步...
net start w32time >nul 2>&1
w32tm /resync
echo.

:: ==========================================
:: 2. Windows 啟用
:: ==========================================
echo.
echo [步驟 2/5] 正在啟用 Windows...

set "KMS_Server=192.192.120.180"

:: 1. 清除舊的 KMS 設定，避免干擾
call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ckms >nul

echo  - 嘗試透過系統預設授權或主機板內建授權啟用...
call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ato >nul

if %errorlevel% equ 0 (
    echo [OK] Windows 已經成功啟用！
    goto :end
)

echo [提示] 標準啟用未通過，正在偵測 Windows 版本並切換至校內 KMS 伺服器...

:: 2. 取得當前 Windows 版本並安裝對應的 KMS 用戶端金鑰 (GVLK)
for /f "tokens=2 delims==" %%i in ('wmic os get Caption /value 2^>nul') do set "OS_Name=%%i"

echo 檢測到系統版本：%OS_Name%

:: 依版本自動對應安裝大量授權金鑰
echo %OS_Name% | findstr /i "Pro" >nul
if %errorlevel% equ 0 (
    :: 專業版金鑰
    call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX >nul
    goto :activate_kms
)

echo %OS_Name% | findstr /i "Enterprise" >nul
if %errorlevel% equ 0 (
    :: 企業版金鑰
    call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 >nul
    goto :activate_kms
)

echo %OS_Name% | findstr /i "Education" >nul
if %errorlevel% equ 0 (
    :: 教育版金鑰
    call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ipk NW6C2-QMPVW-D7KKK-3GKT6-VCFB2 >nul
    goto :activate_kms
)

:: 若無法辨識或為家用版（家用版無法用KMS），預設嘗試專業版金鑰
call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX >nul

:activate_kms
:: 3. 設定 KMS 伺服器並執行啟用
call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /skms %KMS_Server%:1688 >nul
call %windir%\system32\cscript.exe //nologo %windir%\system32\slmgr.vbs /ato

if %errorlevel% equ 0 (
    echo [OK] 已成功透過校內 KMS 伺服器啟用 Windows！
) else (
    echo [錯誤] 啟用失敗！請確認電腦是否連線至校內網路，並聯繫網管人員。
)

:end

echo.

:: ==========================================
:: 3. Office 啟用
:: ==========================================
echo.
echo [步驟 3/5] 正在啟用 Office...

set "OfficePath="

if exist "C:\Program Files\Microsoft Office\Office16\ospp.vbs" (
    set "OfficePath=C:\Program Files\Microsoft Office\Office16"
) else if exist "C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs" (
    set "OfficePath=C:\Program Files (x86)\Microsoft Office\Office16"
)

if "%OfficePath%"=="" (
    echo [提示] Office 啟用失敗，請確認電腦是否安裝 Office。
    goto :RegModify
)

cd /d "%OfficePath%"

call %windir%\system32\cscript.exe ospp.vbs /dstatus | findstr /I "O365 M365 Subscription" >nul
if %errorlevel% equ 0 (
    echo [提示] 偵測到 Microsoft 365 Office。
) else (
    call %windir%\system32\cscript.exe ospp.vbs /remhst >nul
    call %windir%\system32\cscript.exe ospp.vbs /sethst:%KMS_Server% >nul
    call %windir%\system32\cscript.exe ospp.vbs /setprt:1688 >nul
    call %windir%\system32\cscript.exe ospp.vbs /act
)

:RegModify
pushd "%~dp0"
echo.

:: ==========================================
:: 4. 其他修正
:: ==========================================
echo.
echo [步驟 4/5] 快完成了...
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v "SetDisablePauseUXAccess" /t REG_DWORD /d 1 /f >nul

ipconfig /flushdns >nul

reg delete "HKCU\Software\Microsoft\Terminal Server Client\Default" /va /f >nul 2>&1
reg delete "HKCU\Software\Microsoft\Terminal Server Client\Servers" /f >nul 2>&1
del /ah /f "%userprofile%\documents\Default.rdp" >nul 2>&1

echo.
echo ===================================================
echo 執行完畢！
echo ===================================================
timeout /t 5 >nul
exit