CIS Remediation Batch Script

BATCH SCRIPT

@echo off

setlocal enabledelayedexpansion

:: ========================================

:: Simple Registry SID Processor - Batch Version

:: ========================================

:: This simplified batch script processes Windows Registry files listed in a text file.

:: It replaces <***USER_SID***> placeholders with the current user's actual SID and

:: applies the registry changes.

::

:: Usage: process_registry_simple.bat <file_list.txt>

:: Example: process_registry_simple.bat registry_files_list.txt

:: ========================================

:: Configuration - Edit these paths as needed

set "REGISTRY_SOURCE_PATH=.\registry_files\"

set "TEMP_DIR=%TEMP%"

:: Statistics

set "PROCESSED_COUNT=0"

set "FAILED_COUNT=0"

echo.

echo Simple Registry SID Processor - Batch Version

echo ==============================================

echo.

:: Check if file list parameter is provided

if "%~1"=="" (

echo ERROR: No file list specified.

echo Usage: %~nx0 ^<file_list.txt^>

echo Example: %~nx0 registry_files_list.txt

pause

exit /b 1

)

set "FILE_LIST=%~1"

:: Check if file list exists

if not exist "%FILE_LIST%" (

echo ERROR: File list "%FILE_LIST%" not found.

pause

exit /b 1

)

:: Get current user's SID

echo [%TIME%] INFO: Getting current user SID...

call :GetUserSID

if "!USER_SID!"=="" (

echo [%TIME%] ERROR: Could not determine user SID.

echo Please run this script as an administrator or check your permissions.

pause

exit /b 1

)

echo [%TIME%] INFO: User SID: !USER_SID!

echo [%TIME%] INFO: Source path: %REGISTRY_SOURCE_PATH%

echo [%TIME%] INFO: File list: %FILE_LIST%

echo.

:: Read and display files to be processed

echo [%TIME%] INFO: Reading file list...

set "FILE_COUNT=0"

echo Files to be processed:

for /f "usebackq tokens=* delims=" %%a in ("%FILE_LIST%") do (

set "line=%%a"

:: Skip empty lines and comments

if not "!line!"=="" (

if not "!line:~0,1!"=="#" (

echo - !line!

set /a FILE_COUNT+=1

)

)

)

if !FILE_COUNT! equ 0 (

echo [%TIME%] WARN: No files to process

pause

exit /b 0

)

echo.

echo [%TIME%] INFO: Found !FILE_COUNT! files in list

echo.

:: Confirmation

set /p "CONFIRM=Do you want to proceed? (Y/N): "

if /i not "!CONFIRM!"=="Y" (

echo [%TIME%] WARN: Operation cancelled by user

pause

exit /b 0

)

echo.

:: Process each file in the list

for /f "usebackq tokens=* delims=" %%a in ("%FILE_LIST%") do (

set "line=%%a"

:: Skip empty lines and comments

if not "!line!"=="" (

if not "!line:~0,1!"=="#" (

call :ProcessRegistryFile "!line!"

)

)

)

:: Summary

echo.

echo Processing Summary:

echo ==================

echo Files processed successfully: !PROCESSED_COUNT!

echo Files failed: !FAILED_COUNT!

set /a TOTAL_COUNT=!PROCESSED_COUNT!+!FAILED_COUNT!

echo Total files: !TOTAL_COUNT!

echo.

if !FAILED_COUNT! gtr 0 (

echo [%TIME%] WARN: Some files failed to process

set "EXIT_CODE=1"

) else (

echo [%TIME%] SUCCESS: All files processed successfully

set "EXIT_CODE=0"

)

echo.

echo Operation completed.

pause

exit /b !EXIT_CODE!

:: ========================================

:: SUBROUTINES

:: ========================================

:GetUserSID

:: Get current user's SID using multiple methods

for /f "tokens=2 delims==" %%i in ('wmic useraccount where name^="%USERNAME%" get sid /value 2^>nul ^| find "SID="') do (

set "USER_SID=%%i"

)

:: Alternative method if WMIC fails

if "!USER_SID!"=="" (

echo [%TIME%] INFO: WMIC method failed, trying alternative method...

for /f "tokens=1" %%i in ('whoami /user /fo table /nh 2^>nul ^| findstr /r "S-1-"') do (

set "USER_SID=%%i"

)

)

goto :eof

:ProcessRegistryFile

:: Process a single registry file

set "FILENAME=%~1"

set "SOURCE_FILE=%REGISTRY_SOURCE_PATH%%FILENAME%"

set "TEMP_FILE=%TEMP_DIR%\processed_%RANDOM%_%FILENAME%"

echo [%TIME%] INFO: Processing: %FILENAME%

:: Check if source file exists

if not exist "%SOURCE_FILE%" (

echo [%TIME%] ERROR: File not found: %SOURCE_FILE%

set /a FAILED_COUNT+=1

goto :eof

)

:: Process the file - replace SID placeholders

(

for /f "usebackq delims=" %%a in ("%SOURCE_FILE%") do (

set "line=%%a"

set "line=!line:<***USER_SID***>=!USER_SID!!"

echo !line!

)

) > "%TEMP_FILE%"

:: Verify the temporary file was created

if not exist "%TEMP_FILE%" (

echo [%TIME%] ERROR: Failed to create processed file for "%FILENAME%"

set /a FAILED_COUNT+=1

goto :eof

)

:: Apply the registry changes

regedit /s "%TEMP_FILE%"

if !ERRORLEVEL! equ 0 (

echo [%TIME%] SUCCESS: Successfully applied: %FILENAME%

set /a PROCESSED_COUNT+=1

) else (

echo [%TIME%] ERROR: Failed to apply: %FILENAME% - Error code: !ERRORLEVEL!

set /a FAILED_COUNT+=1

)

:: Clean up temporary file

del "%TEMP_FILE%" 2>nul

goto :eof

Next
Next

CIS Benchmarks Simplified PS script