@echo off REM Install-Drivers.cmd - Adds bundled INF driver packages to the Windows driver store REM via pnputil. Runs from C:\PreInstall\installers\drivers\ where each vendor REM subdir (prolific\, startech\) sits alongside this script. /subdirs walks into REM them so one call covers every bundled driver. REM REM Writes C:\ProgramData\PXEDrivers\drivers-installed.marker on success so the REM preinstall runner's File DetectionMethod can skip re-runs. setlocal set LOGDIR=C:\Logs\PreInstall set LOG=%LOGDIR%\Install-Drivers.log set MARKER_DIR=C:\ProgramData\PXEDrivers set MARKER=%MARKER_DIR%\drivers-installed.marker if not exist "%LOGDIR%" mkdir "%LOGDIR%" if not exist "%MARKER_DIR%" mkdir "%MARKER_DIR%" echo ================================================================ >> "%LOG%" echo [%date% %time%] Install-Drivers session start >> "%LOG%" echo Source dir: %~dp0 >> "%LOG%" echo ================================================================ >> "%LOG%" REM pnputil /add-driver with /subdirs recurses into vendor subdirs. /install REM binds the driver to any matching hardware present now; drivers without a REM matching device still land in the driver store and bind on plug-in later. pnputil.exe /add-driver "%~dp0*.inf" /subdirs /install >> "%LOG%" 2>&1 set RC=%ERRORLEVEL% echo [%date% %time%] pnputil exit code: %RC% >> "%LOG%" REM pnputil exit codes: REM 0 success REM 259 ERROR_NO_MORE_ITEMS - no INFs matched (treat as failure) REM 3010 at least one driver installed, reboot recommended (treat as success) if "%RC%"=="0" goto :ok if "%RC%"=="3010" goto :ok echo [%date% %time%] FAILED (exit %RC%) >> "%LOG%" exit /b %RC% :ok echo [%date% %time%] SUCCESS >> "%LOG%" echo installed %date% %time% > "%MARKER%" exit /b 0