Skip to content
Code3
ultratrailrunningags_g7wnyd
2025-09-29T13:30:41-06:00
Copy to Clipboard
@echo off setlocal ENABLEDELAYEDEXPANSION :: Carpeta destino de logs set "LOG_DIR=C:\Temp\OSUpgrade" if not exist "%LOG_DIR%" mkdir "%LOG_DIR%" :: Obtener ruta del script set "PATCH_DIR=%~dp0" cd /d "%PATCH_DIR%" :: Obtener fecha y hora en formato YYYYMMDD_HHMMSS con PowerShell for /f "usebackq tokens=*" %%i in (`powershell -NoLogo -NoProfile -Command "(Get-Date).ToString('yyyyMMdd_HHmmss')"`) do set "DATETIME=%%i" :: Nombre del host set "HOSTNAME=%COMPUTERNAME%" :: Archivo de log set "LOG_FILE=%LOG_DIR%\patchinglog_%HOSTNAME%_%DATETIME%.txt" echo ============================================== > "%LOG_FILE%" echo Inicio de instalacion - %DATE% %TIME% >> "%LOG_FILE%" echo Equipo: %HOSTNAME% >> "%LOG_FILE%" echo ============================================== >> "%LOG_FILE%" :: Inicializar listas y contadores set "LIST_OK=" set "LIST_REBOOT=" set "LIST_ALREADY=" set "LIST_NOTAPPLICABLE=" set "LIST_PENDING=" set "LIST_ERROR=" set COUNT_OK=0 set COUNT_REBOOT=0 set COUNT_ALREADY=0 set COUNT_NOTAPPLICABLE=0 set COUNT_PENDING=0 set COUNT_ERROR=0 set COUNT_TOTAL=0 :: Verificar si hay archivos MSU dir /b *.msu >nul 2>&1 if errorlevel 1 ( echo No se encontraron archivos MSU en %PATCH_DIR% echo [%DATE% %TIME%] No se encontraron archivos MSU >> "%LOG_FILE%" goto :FIN ) :: Crear lista ordenada por fecha ascendente dir /b /od *.msu > parches_ordenados.txt :: Ejecutar los parches uno por uno set INDEX=0 for /f "usebackq delims=" %%F in ("parches_ordenados.txt") do call :INSTALAR "%%F" goto :RESUMEN :: --------- Subrutina de instalacion ---------- :INSTALAR set /a INDEX+=1 set /a COUNT_TOTAL+=1 set "PARCHE=%~1" echo Instalando parche !INDEX!: !PARCHE! echo [%DATE% %TIME%] Instalando: !PARCHE! (!INDEX!) >> "%LOG_FILE%" start /wait "" wusa "!PARCHE!" /quiet /norestart set ERRLEVEL=%ERRORLEVEL% if %ERRLEVEL%==0 ( echo Instalacion exitosa de !PARCHE! echo Instalacion exitosa de !PARCHE! >> "%LOG_FILE%" set "LIST_OK=!LIST_OK! !PARCHE!" set /a COUNT_OK+=1 ) else if %ERRLEVEL%==3010 ( echo Instalacion exitosa de !PARCHE!, requiere reinicio echo Instalacion exitosa de !PARCHE!, requiere reinicio >> "%LOG_FILE%" set "LIST_REBOOT=!LIST_REBOOT! !PARCHE!" set /a COUNT_REBOOT+=1 ) else if %ERRLEVEL%==2359302 ( echo El parche !PARCHE! ya esta instalado echo El parche !PARCHE! ya esta instalado >> "%LOG_FILE%" set "LIST_ALREADY=!LIST_ALREADY! !PARCHE!" set /a COUNT_ALREADY+=1 ) else if %ERRLEVEL%==-2145124329 ( echo El parche !PARCHE! no es aplicable a este sistema echo El parche !PARCHE! no es aplicable a este sistema >> "%LOG_FILE%" set "LIST_NOTAPPLICABLE=!LIST_NOTAPPLICABLE! !PARCHE!" set /a COUNT_NOTAPPLICABLE+=1 ) else if %ERRLEVEL%==-905928699 ( echo El parche !PARCHE! no se puede instalar: reinicio pendiente echo El parche !PARCHE! no se puede instalar: reinicio pendiente >> "%LOG_FILE%" set "LIST_PENDING=!LIST_PENDING! !PARCHE!" set /a COUNT_PENDING+=1 ) else ( echo Error al instalar !PARCHE! - Codigo: %ERRLEVEL% echo Error al instalar !PARCHE! - Codigo de error: %ERRLEVEL% >> "%LOG_FILE%" set "LIST_ERROR=!LIST_ERROR! !PARCHE!(%ERRLEVEL%)" set /a COUNT_ERROR+=1 ) echo --------------------------- exit /b :: --------------------------------------------- :RESUMEN ( echo. echo ============================================== echo RESUMEN DE INSTALACION echo ============================================== if defined LIST_OK ( echo. echo [OK] Instalados correctamente: for %%A in (!LIST_OK!) do echo %%A ) if defined LIST_REBOOT ( echo. echo [REBOOT] Instalados, requieren reinicio: for %%A in (!LIST_REBOOT!) do echo %%A ) if defined LIST_ALREADY ( echo. echo [YA] Ya instalados: for %%A in (!LIST_ALREADY!) do echo %%A ) if defined LIST_NOTAPPLICABLE ( echo. echo [NA] No aplicables a este sistema: for %%A in (!LIST_NOTAPPLICABLE!) do echo %%A ) if defined LIST_PENDING ( echo. echo [PEND] No instalados por reinicio pendiente: for %%A in (!LIST_PENDING!) do echo %%A ) if defined LIST_ERROR ( echo. echo [ERROR] Fallaron con error desconocido: for %%A in (!LIST_ERROR!) do echo %%A ) echo. echo ============================================== echo CONTEO FINAL echo ============================================== echo Total procesados: %COUNT_TOTAL% echo OK: %COUNT_OK% echo Requieren reinicio: %COUNT_REBOOT% echo Ya instalados: %COUNT_ALREADY% echo No aplicables: %COUNT_NOTAPPLICABLE% echo Reinicio pendiente: %COUNT_PENDING% echo Errores: %COUNT_ERROR% ) >> "%LOG_FILE%" type "%LOG_FILE%" goto :REINICIO :REINICIO del parches_ordenados.txt choice /m "Deseas reiniciar el servidor ahora?" if errorlevel 2 ( echo No se reiniciara el servidor. echo [%DATE% %TIME%] Instalacion finalizada sin reinicio >> "%LOG_FILE%" ) else ( echo Reiniciando servidor... echo [%DATE% %TIME%] Instalacion finalizada - reinicio iniciado >> "%LOG_FILE%" shutdown /r /t 10 ) :FIN pause endlocal
Page load link
Go to Top