@echo off
:: 設定命令提示字元使用 UTF-8 編碼，解決中文亂碼
chcp 65001 >nul

:: =========================================================================
:: 學校電腦密碼原則還原與解除工具 (適用 Win10 / Win11)
:: 功能：關閉複雜度、最小長度歸零、最長使用期限設為「從不 (UNLIMITED)」
:: =========================================================================

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    goto UACAdmin
) else (
    goto getAdmin
)

:UACAdmin
echo 正在請求系統管理員權限...
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B

:getAdmin
pushd "%CD%"
CD /D "%~dp0"

echo ==========================================================
echo 正在解除密碼限制並將到期日設為「從不」，請稍候...
echo ==========================================================

:: 1. 透過 net accounts 將最長期限設為 UNLIMITED (從不)
net accounts /minpwage:0 /maxpwage:UNLIMITED /minpwlen:0 >nul

:: 2. 透過安全性設定檔更新原則 (MaximumPasswordAge = 0 在 inf 檔中代表永不過期)
echo [Version] > "%temp%\reset_policy.inf"
echo signature="$CHICAGO$" >> "%temp%\reset_policy.inf"
echo [System Access] >> "%temp%\reset_policy.inf"
echo PasswordComplexity = 0 >> "%temp%\reset_policy.inf"
echo MinimumPasswordLength = 0 >> "%temp%\reset_policy.inf"
echo MaximumPasswordAge = 0 >> "%temp%\reset_policy.inf"
echo MinimumPasswordAge = 0 >> "%temp%\reset_policy.inf"

:: 套用設定
secedit /configure /db "%temp%\reset_policy.sdb" /cfg "%temp%\reset_policy.inf" /areas SECURITYPOLICY >nul

:: 清理暫存檔
del "%temp%\reset_policy.inf"
del "%temp%\reset_policy.sdb"

echo ==========================================================
echo 【解除完成！】
echo 1. 密碼複雜度要求：已關閉 (停用)
echo 2. 密碼最小長度：0 (不限制)
echo 3. 密碼最長使用期限：從不 (UNLIMITED)
echo 4. 密碼最短使用期限：0 天
echo ==========================================================
timeout /t 3 >nul
exit