tozo Posted January 28, 2008 Posted January 28, 2008 (edited) I didn't understand how I will do my os turkish @Echo offTITLE Vista Update Integration (offline)::-------------------------------------------------------------------::Purpose: Batch integrates msu update files into install.wim offline::::CALL: Called by user::::Requirements: install.wim has to be mounted to %VMount% already!!!::::Version: 1.0.1::::History:::::Changes by 1.0.1::: 1. Added further Explanations for pkgmgr.exe call:: 2. Added further Explanations for "DIR /OD >sort.txt" line:: 3. Changed the value in the following line, which was:: For /F "Tokens=4" %%i IN ('FINDSTR ".cab" Sort.txt') DO Call :WriteXML %%i:: and is now:: For /F "Tokens=5" %%i IN ('FINDSTR ".cab" Sort.txt') DO Call :WriteXML %%i :: Change was necessary to get it worked with English OS::-------------------------------------------------------------------::Check environment::Fist of all is checked, if all used environment variables are declared and valid and if::all used directories do exist. This done by check_umgebung.cmd.::::check_umgebung.cmd will assign a value "true" to EnvErr variable, if there is an error in::working environment and it will assign "false" to EnvErr variable, if everything is alright::in working evrionment.::::If there is an error in working environment (EnvErr=true) au_fehler.cmd is called.::au_fehler.cmd will display an error message and quit the batch.CALL check_umgebung.cmdIF %EnvErr%==true CALL au_fehler.cmd::You need to adpat the following SET lines, if your system was not prepared or not prepared::correctly using preplab.cmd. Remove everything in front of SET and adjust the path behind::"=". Expect PMgrDir - this is path where pkgmgr.exe is located - all pahtes are arbitrary.::---- Start Adjustment ------------------------------------------------------------------------::SET PMgrDir=%Programfiles%\Windows AIK\Tools\Servicing::SET VMount=C:\WinPERE\Mount::SET VUpdates=J:\Vista\Updates::SET VSand=C:\WinPERE\Sandbox::SET VLog=C:\WinPERE::---- End Adjustment -------------------------------------------------------------------------::The nex step is necessarry, cause Expand.exe is inside different folders depending on OS.::In Vista Expand.exe is located in %Windir%\System32 in XP it's located inside same::folder like package manager (%PMgrDir%).SET Extract=%PMgrDir%IF NOT EXIST "%PMgrDir%"\Expand.exe SET Extract=%Windir%\System32::____________________________________________________________________________________:: MAIN PROCEDURE::____________________________________________________________________________________::Creating an temporary directory inside Updates folder. The msu files will be extracted::to that new temporary folder.IF NOT EXIST %VUpdates%\Temp (MKDIR %VUpdates%\Temp)DEL %VUpdates%\Temp\*.* /q::PUSHD will jump to %VUpdates% folder. Than all present files inside Updates folder are::assigned to :Extract subroutine.PUSHD %VUpdates%FOR %%i IN (*) DO (Call :Extract %%i)::Checking for older file version created by this batch before may be and deleting them::if necessary to avoid any conflicts.IF EXIST %VUpdates%\Temp\integrate.xml DEL /Q %VUpdates%\Temp\integrate.xmlIF EXIST %VUpdates%\Temp\Sort.txt DEL /Q %VUpdates%\Temp\Sort.txt::The following three ECHO lines are redirected into integrate.xml file.::So they are building the first lines of integrate.xml.ECHO ^<^?xml version="1.0" encoding="utf-8"?^>^ >>%VUpdates%\Temp\integrate.xmlECHO ^<^unattend xmlns="urn:schemas-microsoft-com:unattend"^>^ >>%VUpdates%\Temp\integrate.xmlECHO ^<^servicing^>^ >>%VUpdates%\Temp\integrate.xml::PUSHD jumps into %VUpdates%\Temp folder.::Dir /OD lists all the files inside Temp folder by date. The output is redirected to Sort.txt.::::NOTE:::Dir /OD output can be different depending on OS language you're using, so you may need to adjust::the Tokens value in the following line!::::Example:::Dir /OD output on German OS:::::12.02.2007 00:25 4.321.981 Windows6.0-KB929427-x86.msu::12.02.2007 00:27 394.535 Windows6.0-KB925528-x86.msu:: | | | |:: Token 1 Token 2 Token 3 Token 4::::::Dir /OD output on English OS::::: Token 3:: |::12.02.2007 00:25 AM 4.321.981 Windows6.0-KB929427-x86.msu::12.02.2007 00:27 AM 394.535 Windows6.0-KB925528-x86.msu:: | | | |:: Token 1 Token 2 Token 4 Token 5::::::The following FOR loop is searching cab files inside the sort.txt list and forwards the::file name of them (sorted out by Tokens value) - if found - to WriteXML subroutine.PUSHD %VUpdates%\TempDir /OD > Sort.txtFor /F "Tokens=5" %%i IN ('FINDSTR ".cab" Sort.txt') DO Call :WriteXML %%i::Now the two finishing lines are added to integrate.xml. Again the ECHO commands are::redirected to do so.ECHO ^<^/servicing^>^ >>%VUpdates%\Temp\integrate.xmlECHO ^<^/unattend^>^ >>%VUpdates%\Temp\integrate.xml::At least package manager (pkgmgr.exe) is executed and installs the packages using following::parameters:::::/o: points to the folder where image is mounted to and defines the windows folder inside:: the mounted image.::::/n: assigns the answer file (xml file) containing the informations about the updates, which:: supposed to be installed.::::/s: points to the sandbox folder (temporary folder) which will be used by package manager:: to extract the cabs before integrating them.::::/l: points to the location of the log file and defines the name of the log.::::IMPORTANT:::START command does interpret the first Expression inside qutes as Window Title. This is ::the reason, why you need "PMgr". You can rename but not remove it. Otherwise the whole ::command will fail!!!START "PMgr" /WAIT "%PMgrDir%\pkgmgr.exe" /o:%VMount%;%VMount%\Windows /n:%VUpdates%\Temp\integrate.xml /s:%VSandb% /l:%VLog%\pkglog.txtECHO The process of integration was finished with error level %ERRORLEVEL%.RD %VSandb% /q /sDEL %VUpdates%\Temp\*.* /qMKDIR %VWork%\SandboxPauseEXIT::____________________________________________________________________________:: SUB PROCEDURES & PARTS EXECUTED OPTIONAL::____________________________________________________________________________::Extract subroutine extracts the msu files die MSU-Dateien from %VUpdates% directory ::to %VUpdates%\Temp. There they will be present with same names but cab format.:ExtractSTART "Expand" /WAIT "%Extract%"\Expand.exe %1 -f:* %VUpdates%\TempGOTO :EOF::WriteXML subroutine writes entries into integrate.xml, which are specified by the name of::coresponding cab file. This is the command line, which will call the installation of the::cab during pkgmgr procedure later.:WriteXMLIF "%1"=="WSUSSCAN.cab" Goto :EOFSET Name=%1IF ".%Name%"=="." GOTO :EOFSET XML=%Name:~0,-4%.xmlSET Cab=%Name:~0,-4%.cabECHO ^<^package action="install"^>^ >>%VUpdates%\Temp\integrate.xmlFOR /F "Tokens=*" %%i IN ('FINDSTR "assemblyIdentity" %XML%') DO (Echo %%i >>%VUpdates%\Temp\integrate.xml)ECHO ^<^source location="%VUpdates%\Temp\%Cab%" /^>^ >>%VUpdates%\Temp\integrate.xmlECHO ^<^/package^>^ >>%VUpdates%\Temp\integrate.xml:EOFI solved the problem Edited January 29, 2008 by tozo
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now