Found. Thanks! And that works for Server 2022 too. Shame to everyone who yesterday told that there is no such thing! Thank you for help!
Windows 11 does not have those baseless cab/psf for LCU (no longer included since build 21382) you are stuck with the delta psfx cab/psf
I know you hate self-restored builds. But now I have Server Turbine 2022 - both Core and Full. And I can install hotpatch updates to ServerTurbine VMs on top of on-prem HCI - without reboot. Believe me, for me as an architect in infra consulting the sole idea of implementing that can be sold in 5 minutes to each of Fortune500. And that is the only thing important for me. MSFT *allows* to use ServerTurbine if you have Subscription, but they don't provide ISOs, only VM templates. With PSF I am finally free from using bad-created templates, can configure that for customer needs.
Yeah, @xinso has a lot of great knowledge to share. I'm not sure why some would be bothered by what he's doing. That thread's title is "Windows Editions Reconstruction Project" and that's exactly what he's doing, lol.
you mean the X, think that is a file extension. I think it stands for winsxs folder, but I don't know for sure.
Code: Running in Debug Mode... The window will be closed when finished Takes 1 second log here: Spoiler >set psfnet=0 >if exist "C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe" set psfnet=1 >if exist "C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe" set psfnet=1 >set /a _cdr=0 >for %# in (E F G H I J K L M N O P Q R S T U V W X Y Z) do ( set /a _cdr+=1 set "_adr!_cdr!=%#" ) >( set /a _cdr+=1 set "_adr!_cdr!=E" ) >( set /a _cdr+=1 set "_adr!_cdr!=F" ) >( set /a _cdr+=1 set "_adr!_cdr!=G" ) >( set /a _cdr+=1 set "_adr!_cdr!=H" ) >( set /a _cdr+=1 set "_adr!_cdr!=I" ) >( set /a _cdr+=1 set "_adr!_cdr!=J" ) >( set /a _cdr+=1 set "_adr!_cdr!=K" ) >( set /a _cdr+=1 set "_adr!_cdr!=L" ) >( set /a _cdr+=1 set "_adr!_cdr!=M" ) >( set /a _cdr+=1 set "_adr!_cdr!=N" ) >( set /a _cdr+=1 set "_adr!_cdr!=O" ) >( set /a _cdr+=1 set "_adr!_cdr!=P" ) >( set /a _cdr+=1 set "_adr!_cdr!=Q" ) >( set /a _cdr+=1 set "_adr!_cdr!=R" ) >( set /a _cdr+=1 set "_adr!_cdr!=S" ) >( set /a _cdr+=1 set "_adr!_cdr!=T" ) >( set /a _cdr+=1 set "_adr!_cdr!=U" ) >( set /a _cdr+=1 set "_adr!_cdr!=V" ) >( set /a _cdr+=1 set "_adr!_cdr!=W" ) >( set /a _cdr+=1 set "_adr!_cdr!=X" ) >( set /a _cdr+=1 set "_adr!_cdr!=Y" ) >( set /a _cdr+=1 set "_adr!_cdr!=Z" ) >set /a _cdr=0 >for /F "tokens=2 delims==:" %# in ('"wmic path Win32_Volume where (DriveLetter is not NULL) get DriveLetter /value" | findstr =') do ( set /a _cdr+=1 set "_udr!_cdr!=%#" ) >( set /a _cdr+=1 set "_udr!_cdr!=C" ) >( set /a _cdr+=1 set "_udr!_cdr!=D" ) >for /F "tokens=2 delims==:" %# in ('"wmic path Win32_LogicalDisk where (DeviceID is not NULL) get DeviceID /value" | findstr =') do ( set /a _cdr+=1 set "_udr!_cdr!=%#" ) >( set /a _cdr+=1 set "_udr!_cdr!=C" ) >( set /a _cdr+=1 set "_udr!_cdr!=D" ) >for /L %A in (1 1 4) do (for /L %# in (1 1 22) do (if defined _adr%# (if /I "!_udr%A!" == "!_adr%#!" set "_adr%#=" ) ) ) >(for /L %# in (1 1 22) do (if defined _adr%# (if /I "!_udr1!" == "!_adr%#!" set "_adr%#=" ) ) ) >(if defined _adr1 (if /I "!_udr1!" == "!_adr1!" set "_adr1=" ) ) >(if defined _adr2 (if /I "!_udr1!" == "!_adr2!" set "_adr2=" ) ) >(if defined _adr3 (if /I "!_udr1!" == "!_adr3!" set "_adr3=" ) ) >(if defined _adr4 (if /I "!_udr1!" == "!_adr4!" set "_adr4=" ) ) >(if defined _adr5 (if /I "!_udr1!" == "!_adr5!" set "_adr5=" ) ) >(if defined _adr6 (if /I "!_udr1!" == "!_adr6!" set "_adr6=" ) ) >(if defined _adr7 (if /I "!_udr1!" == "!_adr7!" set "_adr7=" ) ) >(if defined _adr8 (if /I "!_udr1!" == "!_adr8!" set "_adr8=" ) ) >(if defined _adr9 (if /I "!_udr1!" == "!_adr9!" set "_adr9=" ) ) >(if defined _adr10 (if /I "!_udr1!" == "!_adr10!" set "_adr10=" ) ) >(if defined _adr11 (if /I "!_udr1!" == "!_adr11!" set "_adr11=" ) ) >(if defined _adr12 (if /I "!_udr1!" == "!_adr12!" set "_adr12=" ) ) >(if defined _adr13 (if /I "!_udr1!" == "!_adr13!" set "_adr13=" ) ) >(if defined _adr14 (if /I "!_udr1!" == "!_adr14!" set "_adr14=" ) ) >(if defined _adr15 (if /I "!_udr1!" == "!_adr15!" set "_adr15=" ) ) >(if defined _adr16 (if /I "!_udr1!" == "!_adr16!" set "_adr16=" ) ) >(if defined _adr17 (if /I "!_udr1!" == "!_adr17!" set "_adr17=" ) ) >(if defined _adr18 (if /I "!_udr1!" == "!_adr18!" set "_adr18=" ) ) >(if defined _adr19 (if /I "!_udr1!" == "!_adr19!" set "_adr19=" ) ) >(if defined _adr20 (if /I "!_udr1!" == "!_adr20!" set "_adr20=" ) ) >(if defined _adr21 (if /I "!_udr1!" == "!_adr21!" set "_adr21=" ) ) >(if defined _adr22 (if /I "!_udr1!" == "!_adr22!" set "_adr22=" ) ) >(for /L %# in (1 1 22) do (if defined _adr%# (if /I "!_udr2!" == "!_adr%#!" set "_adr%#=" ) ) ) >(if defined _adr1 (if /I "!_udr2!" == "!_adr1!" set "_adr1=" ) ) >(if defined _adr2 (if /I "!_udr2!" == "!_adr2!" set "_adr2=" ) ) >(if defined _adr3 (if /I "!_udr2!" == "!_adr3!" set "_adr3=" ) ) >(if defined _adr4 (if /I "!_udr2!" == "!_adr4!" set "_adr4=" ) ) >(if defined _adr5 (if /I "!_udr2!" == "!_adr5!" set "_adr5=" ) ) >(if defined _adr6 (if /I "!_udr2!" == "!_adr6!" set "_adr6=" ) ) >(if defined _adr7 (if /I "!_udr2!" == "!_adr7!" set "_adr7=" ) ) >(if defined _adr8 (if /I "!_udr2!" == "!_adr8!" set "_adr8=" ) ) >(if defined _adr9 (if /I "!_udr2!" == "!_adr9!" set "_adr9=" ) ) >(if defined _adr10 (if /I "!_udr2!" == "!_adr10!" set "_adr10=" ) ) >(if defined _adr11 (if /I "!_udr2!" == "!_adr11!" set "_adr11=" ) ) >(if defined _adr12 (if /I "!_udr2!" == "!_adr12!" set "_adr12=" ) ) >(if defined _adr13 (if /I "!_udr2!" == "!_adr13!" set "_adr13=" ) ) >(if defined _adr14 (if /I "!_udr2!" == "!_adr14!" set "_adr14=" ) ) >(if defined _adr15 (if /I "!_udr2!" == "!_adr15!" set "_adr15=" ) ) >(if defined _adr16 (if /I "!_udr2!" == "!_adr16!" set "_adr16=" ) ) >(if defined _adr17 (if /I "!_udr2!" == "!_adr17!" set "_adr17=" ) ) >(if defined _adr18 (if /I "!_udr2!" == "!_adr18!" set "_adr18=" ) ) >(if defined _adr19 (if /I "!_udr2!" == "!_adr19!" set "_adr19=" ) ) >(if defined _adr20 (if /I "!_udr2!" == "!_adr20!" set "_adr20=" ) ) >(if defined _adr21 (if /I "!_udr2!" == "!_adr21!" set "_adr21=" ) ) >(if defined _adr22 (if /I "!_udr2!" == "!_adr22!" set "_adr22=" ) ) >(for /L %# in (1 1 22) do (if defined _adr%# (if /I "!_udr3!" == "!_adr%#!" set "_adr%#=" ) ) ) >(if defined _adr1 (if /I "!_udr3!" == "!_adr1!" set "_adr1=" ) ) >(if defined _adr2 (if /I "!_udr3!" == "!_adr2!" set "_adr2=" ) ) >(if defined _adr3 (if /I "!_udr3!" == "!_adr3!" set "_adr3=" ) ) >(if defined _adr4 (if /I "!_udr3!" == "!_adr4!" set "_adr4=" ) ) >(if defined _adr5 (if /I "!_udr3!" == "!_adr5!" set "_adr5=" ) ) >(if defined _adr6 (if /I "!_udr3!" == "!_adr6!" set "_adr6=" ) ) >(if defined _adr7 (if /I "!_udr3!" == "!_adr7!" set "_adr7=" ) ) >(if defined _adr8 (if /I "!_udr3!" == "!_adr8!" set "_adr8=" ) ) >(if defined _adr9 (if /I "!_udr3!" == "!_adr9!" set "_adr9=" ) ) >(if defined _adr10 (if /I "!_udr3!" == "!_adr10!" set "_adr10=" ) ) >(if defined _adr11 (if /I "!_udr3!" == "!_adr11!" set "_adr11=" ) ) >(if defined _adr12 (if /I "!_udr3!" == "!_adr12!" set "_adr12=" ) ) >(if defined _adr13 (if /I "!_udr3!" == "!_adr13!" set "_adr13=" ) ) >(if defined _adr14 (if /I "!_udr3!" == "!_adr14!" set "_adr14=" ) ) >(if defined _adr15 (if /I "!_udr3!" == "!_adr15!" set "_adr15=" ) ) >(if defined _adr16 (if /I "!_udr3!" == "!_adr16!" set "_adr16=" ) ) >(if defined _adr17 (if /I "!_udr3!" == "!_adr17!" set "_adr17=" ) ) >(if defined _adr18 (if /I "!_udr3!" == "!_adr18!" set "_adr18=" ) ) >(if defined _adr19 (if /I "!_udr3!" == "!_adr19!" set "_adr19=" ) ) >(if defined _adr20 (if /I "!_udr3!" == "!_adr20!" set "_adr20=" ) ) >(if defined _adr21 (if /I "!_udr3!" == "!_adr21!" set "_adr21=" ) ) >(if defined _adr22 (if /I "!_udr3!" == "!_adr22!" set "_adr22=" ) ) >(for /L %# in (1 1 22) do (if defined _adr%# (if /I "!_udr4!" == "!_adr%#!" set "_adr%#=" ) ) ) >(if defined _adr1 (if /I "!_udr4!" == "!_adr1!" set "_adr1=" ) ) >(if defined _adr2 (if /I "!_udr4!" == "!_adr2!" set "_adr2=" ) ) >(if defined _adr3 (if /I "!_udr4!" == "!_adr3!" set "_adr3=" ) ) >(if defined _adr4 (if /I "!_udr4!" == "!_adr4!" set "_adr4=" ) ) >(if defined _adr5 (if /I "!_udr4!" == "!_adr5!" set "_adr5=" ) ) >(if defined _adr6 (if /I "!_udr4!" == "!_adr6!" set "_adr6=" ) ) >(if defined _adr7 (if /I "!_udr4!" == "!_adr7!" set "_adr7=" ) ) >(if defined _adr8 (if /I "!_udr4!" == "!_adr8!" set "_adr8=" ) ) >(if defined _adr9 (if /I "!_udr4!" == "!_adr9!" set "_adr9=" ) ) >(if defined _adr10 (if /I "!_udr4!" == "!_adr10!" set "_adr10=" ) ) >(if defined _adr11 (if /I "!_udr4!" == "!_adr11!" set "_adr11=" ) ) >(if defined _adr12 (if /I "!_udr4!" == "!_adr12!" set "_adr12=" ) ) >(if defined _adr13 (if /I "!_udr4!" == "!_adr13!" set "_adr13=" ) ) >(if defined _adr14 (if /I "!_udr4!" == "!_adr14!" set "_adr14=" ) ) >(if defined _adr15 (if /I "!_udr4!" == "!_adr15!" set "_adr15=" ) ) >(if defined _adr16 (if /I "!_udr4!" == "!_adr16!" set "_adr16=" ) ) >(if defined _adr17 (if /I "!_udr4!" == "!_adr17!" set "_adr17=" ) ) >(if defined _adr18 (if /I "!_udr4!" == "!_adr18!" set "_adr18=" ) ) >(if defined _adr19 (if /I "!_udr4!" == "!_adr19!" set "_adr19=" ) ) >(if defined _adr20 (if /I "!_udr4!" == "!_adr20!" set "_adr20=" ) ) >(if defined _adr21 (if /I "!_udr4!" == "!_adr21!" set "_adr21=" ) ) >(if defined _adr22 (if /I "!_udr4!" == "!_adr22!" set "_adr22=" ) ) >for /L %# in (1 1 22) do (if not defined _sdr (if defined _adr%# set "_sdr=!_adr%#!:" ) ) >(if not defined _sdr (if defined _adr1 set "_sdr=!_adr1!:" ) ) >(if not defined _sdr (if defined _adr2 set "_sdr=!_adr2!:" ) ) >(if not defined _sdr (if defined _adr3 set "_sdr=!_adr3!:" ) ) >(if not defined _sdr (if defined _adr4 set "_sdr=!_adr4!:" ) ) >(if not defined _sdr (if defined _adr5 set "_sdr=!_adr5!:" ) ) >(if not defined _sdr (if defined _adr6 set "_sdr=!_adr6!:" ) ) >(if not defined _sdr (if defined _adr7 set "_sdr=!_adr7!:" ) ) >(if not defined _sdr (if defined _adr8 set "_sdr=!_adr8!:" ) ) >(if not defined _sdr (if defined _adr9 set "_sdr=!_adr9!:" ) ) >(if not defined _sdr (if defined _adr10 set "_sdr=!_adr10!:" ) ) >(if not defined _sdr (if defined _adr11 set "_sdr=!_adr11!:" ) ) >(if not defined _sdr (if defined _adr12 set "_sdr=!_adr12!:" ) ) >(if not defined _sdr (if defined _adr13 set "_sdr=!_adr13!:" ) ) >(if not defined _sdr (if defined _adr14 set "_sdr=!_adr14!:" ) ) >(if not defined _sdr (if defined _adr15 set "_sdr=!_adr15!:" ) ) >(if not defined _sdr (if defined _adr16 set "_sdr=!_adr16!:" ) ) >(if not defined _sdr (if defined _adr17 set "_sdr=!_adr17!:" ) ) >(if not defined _sdr (if defined _adr18 set "_sdr=!_adr18!:" ) ) >(if not defined _sdr (if defined _adr19 set "_sdr=!_adr19!:" ) ) >(if not defined _sdr (if defined _adr20 set "_sdr=!_adr20!:" ) ) >(if not defined _sdr (if defined _adr21 set "_sdr=!_adr21!:" ) ) >(if not defined _sdr (if defined _adr22 set "_sdr=!_adr22!:" ) ) >if 1 EQU 0 >if 1 EQU 0 ( echo ==== ERROR ==== echo. echo PSFExtractor require .NET Framnework 4.x or 2.0 echo. rem. rem. goto :eof ) >if not defined _pcab ( echo ==== ERROR ==== echo. echo Could not detect cab and psf files echo. rem. rem. goto :eof ) >if not defined _sdr ( echo ==== ERROR ==== echo. echo Could not find or assign unused Drive Letter echo. rem. rem. goto :eof ) >for %# in (PSFExtractor.exe SxSExpand.exe cabarc.exe) do if not exist "!_work!\bin\%#" ( echo ==== ERROR ==== echo. echo Required file %# is missing echo. pause rem. rem. goto :eof ) >if not exist "!_work!\bin\PSFExtractor.exe" ( echo ==== ERROR ==== echo. echo Required file PSFExtractor.exe is missing echo. pause rem. rem. goto :eof ) >if not exist "!_work!\bin\SxSExpand.exe" ( echo ==== ERROR ==== echo. echo Required file SxSExpand.exe is missing echo. pause rem. rem. goto :eof ) >if not exist "!_work!\bin\cabarc.exe" ( echo ==== ERROR ==== echo. echo Required file cabarc.exe is missing echo. pause rem. rem. goto :eof ) >set _did=0 >set _sbst=0 >set "_tmp=D:\_temp32563" >if exist "D:\_temp32563\" set "_tmp=D:\_temp21779" >if not exist "D:\_temp32563\" mkdir "D:\_temp32563" >pushd "!_pcab!" >for /F "delims=" %# in ('dir /b *.cab') do (set "pack=%~n#" & call sfcab ) >(set "pack=Windows10.0-KB5003188-x64-baseless" & call sfcab ) >if exist "Windows10.0-KB5003188-x64-baseless-full_psfx.cab" exit /b >if not exist "Windows10.0-KB5003188-x64-baseless.psf" exit /b >if exist "D:\_temp32563\*.mum" del /f /q "D:\_temp32563\*.mum" >if exist "D:\_temp32563\*.xml" del /f /q "D:\_temp32563\*.xml" >expand.exe -f:update.mum "!_pcab!\Windows10.0-KB5003188-x64-baseless.cab" "D:\_temp32563" 1>nul 2>nul >if not exist "D:\_temp32563\update.mum" exit /b >findstr /i /m "PSFX" "D:\_temp32563\update.mum" || exit /b >if exist "PSFExtractor.exe" ( del /f /q "PSFExtractor.*" del /f /q "SxSExpand.exe" del /f /q "cabarc.exe" ) >if 0 EQU 1 subst E: /d >popd >if exist "D:\_temp32563\" rmdir /s /q "D:\_temp32563\" >if exist "D:\_temp32563\" ( mkdir D:\_del286 1>nul 2>nul robocopy D:\_del286 "D:\_temp32563" /MIR 1>nul 2>nul rmdir /s /q D:\_del286\ 1>nul 2>nul rmdir /s /q "D:\_temp32563\" ) >echo. >echo Finished Finished >echo. >rem. >rem. >goto :eof I did that,
@kibkalo this means the update in not tagged as psfx Code: findstr /i /m "PSFX" "D:\_temp32563\update.mum" || exit /b you can remove the check line from script Code: findstr /i /m "PSFX" "%_tmp%\update.mum" %_Nul3% || exit /b