Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

726 lines
26 KiB

/***********************************************************************
Created: 5th June 2001
Last Modified: 28th June 2001
***********************************************************************/
/** SCRIPT SPECIFIC VARIABLES **/
var File; //used for input argument
var LFile = "status.log"; //log file create (OK to change!)
var Title = "Creating WinPE Images"; //title on all dialogs created (OK to change!)
var Arch = "32"; //what arch to use, default to 32-bit
var Temp_Loc = "WinPE.temp.build"; //where it temp copies files from opk (OK to change!)
var Default_Dest_Name = "CustWinPE"; //default location to build WinPE. (OK to change!)
var Default_ISO_Name = "WinPEImage.iso" //default ISO image name
var OPK_Location = "d:"; //defaults to d:
var XP_Location = "d:"; //default to d:
var startfile = "winpesys.inf"; //the file which has the reg key for startnet.cmd
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//used for checking drive avalibility on net usage
var Max_Components = 10; //dufault number of maximum components
var std_size = 80; //approx target size of the image in MB (used to check if it expanded files)
var Drive_Space_Needed = 300; //space for build location (in MB)
/** VARIABLE CONSTANTS **/
var vbCritical = 16;
var vbQuestion = 32;
var vbExclam = 48;
var vbInfo = 64;
var vbOKOnly = 0;
var vbOKCancel = 1;
var vbAbort = 2;
var vbYesNoCancel = 3;
var vbYesNo = 4;
var vbRetryCancel = 5;
var drtype = new Array(5);//array for drive types
drtype[0] = " Unknown ";
drtype[1] = " Removable ";
drtype[2] = " Fixed ";
drtype[3] = " Remote ";
drtype[4] = " CDROM ";
drtype[5] = " RAMDisk ";
var netdrive = new Array(2); //array for network connections
netdrive[0] = "";
netdrive[1] = "";
var Component = new Array(Max_Components);
var HelpMsg = "Usage: [/?] "+WScript.ScriptName+" <parameter file>\nTo generate a parameter file please run CreateWinPE.hta (double click it)";
// vars used internally (Don't change these)
var In_File;
var OPK_Drive;
var OPK_Loc;
var XP_Loc;
var XP_Drive;
var Dest_Name;
var Dest_Option;
var CommandLine ="";
var Wasnet="0";
var Image_Destination;
var line;
var temp_dest;
var temp_mkdir;
var oDrive;
var Startup="startnet.cmd"; //don't change this
var Winbomp="winbom.ini"; //don't change this
var ReturnVal;
var Com_Count = 0;
var count = 0;
var delaywait = 15;
var Home_Drv="c:";
var Wallpaper="winpe.bmp";
var Done_All = 1; //used for making sure each section in the parameter file is only entered once.
//creating WSH object
var wshShell = WScript.CreateObject("WScript.Shell");
var wshNet = WScript.CreateObject("WScript.Network");
var objEnv = wshShell.Environment("Process"); //doing this so that it uses current HOMEDRIVE
Home_Drv = objEnv("HOMEDRIVE");
Temp_Loc=Home_Drv+"\\"+Temp_Loc;
Default_Dest_Name = Home_Drv+"\\"+Default_Dest_Name; //default location to build WinPE. (OK to change!)
Default_ISO_Name = Home_Drv+"\\"+Default_ISO_Name; //default ISO image name
//checking number of args. It HAS to be 1 else error out
if(WScript.Arguments.length != 1)
{
wshShell.popup(HelpMsg,0,Title,vbInfo);
WScript.Quit();
}
File=WScript.Arguments.Item(0); // saving 1st arg as File
if (File == "/?" || File == "help") //checking of 1st arg is help
{
wshShell.popup(HelpMsg,0,Title,vbInfo);
WScript.Quit();
}
//creating unique logfile name (comment this to disable)
//LFile = "status_"+wshNet.UserName+".log";
//creating objects necessary
var fso=new ActiveXObject("Scripting.FileSystemObject"); //create file sys obj
try{
var logfile=fso.OpenTextFile(LFile,2,true); //logfile
}
catch(e){
wshShell.Popup("ERROR: "+LFile+" is either write protected or being used by another program.\nTerminating Script!",0,Title,vbCritical);
WScript.Quit();
}
logfile.WriteLine(Date()+"\tLOG FILE created!");
logfile.WriteLine(Date()+"\tComputer Name=" + wshNet.ComputerName+",User Name=" + wshNet.UserName);
logfile.WriteBlankLines(1);
//checking if file exists
if (!fso.FileExists(File))
CleanUp("File "+ File + " does not exist!.");
In_File = fso.OpenTextFile(File);
// calling all function to operate now
Read_Settings(); //reads the settings file for inputs to the script
Copy_OPK_Files(); //copies OPK files to temp location
Change_Startup(); //makes changes to add custom startnet.cmd
Change_Wallpaper(); //adds custom wallpaper
Change_Winbom(); //makes changes to add custom winbom.ini
Image_Dest(); //runs mkimg.cmd in here
CleanUp("OK");
/*END OF MAIN*/
/*********************** FUNCTIONs*****************************************/
/*
FUNCTION: Read_Settings()
This function reads the parms from the parameter file, and saves them to local variables.
IT also does some minimal error checking on those parms
*/
function Read_Settings()
{
while (!In_File.AtEndOfStream)
{
switch (In_File.ReadLine().substring(0,5))
{
case "[Arch": //looks for [Architecture]
//reading arch type (can be IA64, I386 32 or 64)
Arch=In_File.ReadLine();
Arch=Arch.toUpperCase();
if (Arch != "32" && Arch != "64" && Arch != "I386" && Arch != "IA64" && Arch != "X86" )
CleanUp("Arch type invalid! ");
if (Arch == "32" || Arch == "x86" || Arch == "I386")
Arch = "I386";
else
Arch = "IA64";
logfile.WriteLine(Date()+"\t(*) Arch Type = "+Arch);
Done_All = Done_All*2; //for verification
break;
case "[Imag": //looks for [Image Destination]
Image_Destination = In_File.ReadLine(); //where to put it ex CD/HDD
if(Image_Destination.toUpperCase() != "CD" && Image_Destination.toUpperCase() != "HDD")
CleanUp("Image Dest not valid! Must be CD or HDD.");
Dest_Name = In_File.ReadLine(); // name of dest
if(Image_Destination.toUpperCase() == "HDD")
{
var d = fso.GetDrive(Dest_Name.substring(0,1));
if (d.DriveType != 2)
CleanUp("Can't create an image on a "+drtype[d.DriveType]+"drive. It must be a FIXED drive.\nPlease Change the [Image Destination] section in "+File+ " file to correct this.");
}
//checking the file extension ...if not .iso then making it so
if(Dest_Name.substring(Dest_Name.length -4,Dest_Name.length).toLowerCase() != ".iso")
{
if(Image_Destination.toUpperCase() == "CD")
Dest_Name=Dest_Name+".iso";
}
else
{
if(Image_Destination.toUpperCase() == "HDD")
CleanUp("Image Name "+Dest_Name+" is invalid for HDD.");
}
//for special case when no option and its the end of the file.
try{
Dest_Option = In_File.ReadLine(); //will be NULL otherwise
if(Dest_Option.toLowerCase() == "bootable")
{
wshShell.Popup("You have choosen to make this image bootable.\nThis may take longer to run.\nYou will be notified when the scrpit is complete.",delaywait,Title,0);
}
}catch(e)
{
CleanUp("Add an extra blank line to the end of "+File);
}
Done_All = Done_All*3; //for verification
break;
case "[OPK ": //looks for [OPK Location]
OPK_Loc = In_File.ReadLine();
if (OPK_Loc == "")
CleanUp("OPK Location not specified!");
logfile.WriteLine(Date()+"\t(*) OPK Locatoin = "+ OPK_Loc);
Done_All = Done_All*5; //for verification
break;
case "[WinX": //looks for [WinXP Location]
XP_Loc = In_File.ReadLine();
if (OPK_Loc == "")
CleanUp("Windows XP Location not specified!");
logfile.WriteLine(Date()+"\t(*) Windows XP Locatoin = "+ XP_Loc);
Done_All = Done_All*7; //for verification
break;
case "[Star": //for [Startup] , where startnet.cmd stuff goes
Startup = In_File.ReadLine();
if (Startup.toLowerCase() != "startnet.cmd" && Startup != "")
if (!fso.FileExists(Startup)) //checking if file exists
CleanUp(Startup+" -- Startup file not found!");
Done_All = Done_All*11; //for verification
break;
case "[Winb": //for [Winbom] , where custom winbom.ini info is placed
try{
Winbom = In_File.ReadLine();
}catch(e)
{CleanUp("Must have [Winbom] section in "+File);}
if (Winbom.toLowerCase() != "winbom.ini" && Winbom != "")
if (!fso.FileExists(Winbom))
CleanUp(Winbom+" -- winbom file not found!");
Done_All = Done_All*13; //for verification
break;
case "[Opti": //for [Optional Components]
count = 0;
Component[count]=In_File.ReadLine();
while(Component[count] != "" && count < 10) //loop which look at optional component
{
count++;
try
{
Component[count]=In_File.ReadLine();
}
catch(e)
{
CleanUp("parmater file is incorrect!");
}
}
if (count > 10)
{
CleanUp("Maximum optional components allowed is "+Max_Components);
}
Com_Count=count;
for(count=0;count<Com_Count;count++)
{
if (!fso.FileExists(Component[count]))
CleanUp(Component[count]+" install file not found!");
}
Done_All = Done_All*17; //for verification
break;
case "[Wall": // for [Wallpaper]
Wallpaper = In_File.ReadLine();
if(Wallpaper != "" && Wallpaper != "winpe.bmp")
{
if (!fso.FileExists(Wallpaper))
CleanUp("Wallpaper "+Wallpaper+" file doesn't exist!");
}
break;
default:
break;
}
}
/* The Done_All var id used to make sure that all the sections of the parameter file
are entered only once. (The use of prime numbers allows for making sure each section
is read only once). */
if (Done_All != (2*3*5*7*11*13*17))
CleanUp("The parameter file "+File+ " is incomplete. Refer to readme.htm for help.");
} /*Read_Settings()*/
function Copy_OPK_Files()
{
/* making dir for temp use ... this will be deleted on cleanup
making sure its doesn't exist already..if so deleing it for good */
if(fso.FolderExists(Temp_Loc))
try{fso.DeleteFolder(Temp_Loc,true)}
catch(e)
{
wshShell.Popup("Can't delete "+Temp_Loc+"\nTerminating script!",0,Title,vbCritical);
logfile.WriteLine(Date()+"\t(E) Can't delete "+Temp_Loc);
WScript.Quit()
}
fso.CreateFolder(Temp_Loc);
/*Checking location if drive/net (for drive must be FIXED drive)
checks if exists and ready */
OPK_Location=Check_Loc(OPK_Loc,0);
OPK_Drive=OPK_Location.substring(0,2);
oDrive=fso.GetDrive(OPK_Drive); //get obj for that drive
if( oDrive.DriveType == 4)
wshShell.Popup("Please place the OPK CD into drive "+OPK_Drive,delaywait,Title,vbOKOnly);
Verify_OPK_CD(OPK_Location);
logfile.WriteLine(Date()+"\t(S) OPK CD is verified!");
// CALLING Copy_XP_Files()
Copy_XP_Files(); //copies XP files to dest location
//copy the files over to the build location
CommandLine="xcopy "+OPK_Location+"\\WINPE "+Temp_Loc+" /F /H";
wshShell.Run(CommandLine,1,true);
//copying factory.exe and netcfg.exe
if(Arch == "I386")
{
CommandLine="xcopy "+OPK_Location+"\\TOOLS\\x86\\Factory.exe "+Temp_Loc;
wshShell.Run(CommandLine,1,true);
CommandLine="xcopy "+OPK_Location+"\\TOOLS\\x86\\Netcfg.exe "+Temp_Loc;
wshShell.Run(CommandLine,1,true);
}
else
{
CommandLine="xcopy "+OPK_Location+"\\TOOLS\\"+Arch+"\\Factory.exe "+Temp_Loc;
wshShell.Run(CommandLine,1,true);
CommandLine="xcopy "+OPK_Location+"\\TOOLS\\"+Arch+"\\Netcfg.exe "+Temp_Loc;
wshShell.Run(CommandLine,1,true);
}
logfile.WriteLine(Date()+"\t(S) OPK files copied from"+OPK_Loc+" to "+Temp_Loc);
return;
}/*Copy_OPK_Files()*/
function Copy_XP_Files()
{
//Checking location if drive/net (for drive must be FIXED drive)
//checks if exists and ready
XP_Location=Check_Loc(XP_Loc,1);
XP_Drive=XP_Location.substring(0,2);
//if its a local drive making sure both aren't CDROM drives. IF so prompt to switch
oDrive=fso.GetDrive(XP_Drive); //get obj for that drive
//if cdrom then give some self destructing prompt
if( oDrive.DriveType == 4)
{
//check if XP and OPK CD location are the same CDROM. If so then prompt to switch
if (XP_Drive == OPK_Drive)
{
var User_Return = wshShell.Popup("Please remove the OPK CD from "+XP_Drive+" and place the WinXP CD into the drive",0,Title,vbOKCancel);
if (User_Return == 2) //if cancel was pressed
CleanUp("User canceled!");
}
else
{
wshShell.Popup("Please place the WinXP CD into drive "+XP_Drive,delaywait,Title,vbOKOnly);
}
}
//make sure the CD is actually there
Verify_XP(XP_Location);
logfile.WriteLine(Date()+"\t(S) WinXP verified!");
return;
}/*Copy_XP_Files()*/
function Verify_OPK_CD(parm)
{
var verify="yes";
//check for certain files and folder to make sure CD is actually OPK CD
if(!fso.FolderExists(parm+"\\WINPE"))
verify="no";
if(!fso.FileExists(parm+"\\winpe\\extra.inf"))
verify="no";
if(!fso.FileExists(parm+"\\winpe\\winpesys.inf"))
verify="no";
if(!fso.FileExists(parm+"\\winpe\\winbom.ini"))
verify="no";
if(!fso.FileExists(parm+"\\winpe\\mkimg.cmd"))
verify="no";
if(!fso.FileExists(parm+"\\winpe\\oemmint.exe"))
verify="no";
if(!fso.FolderExists(parm+"\\TOOLS"))
verify="no";
if (verify == "no")
CleanUp(OPK_Loc+" isn't the location for the OPK!");
}/*Verify_OPK_CD(parm)*/
function Verify_XP(parm)
{
var verify="yes";
//check for certain files and folder to make sure CD is actually OPK CD
if(!fso.FileExists(parm+"\\setup.exe"))
verify="no";
if(!fso.FolderExists(parm+"\\"+Arch))
verify="no";
if(!fso.FolderExists(parm+"\\"+Arch+"\\SYSTEM32"))
verify="no";
if(!fso.FileExists(parm+"\\"+Arch+"\\System32\\smss.exe"))
verify="no";
if(!fso.FileExists(parm+"\\"+Arch+"\\System32\\ntdll.dll"))
verify="no";
if(!fso.FileExists(parm+"\\"+Arch+"\\winnt32.exe"))
verify="no";
if (verify == "no")
CleanUp(XP_Loc+" isn't the location for Windows XP!");
return;
}/*Verify_XP(parm)*/
function Check_Loc(parm,type)
{
if (parm == "")
CleanUp("Value for OPK location or WinXP location is undefined!");
if (type != 1 && type != 0) //XP=1,OPK=0
CleanUp("Function Check_Loc was called incorrectly.");
if (parm.substring(parm.length -1,parm.length) == "\\")
parm = parm.substring(0,parm.length -1);
if (parm.substring(0,2) == "\\\\") //its a net location
{
//making sure type is correct
Wasnet="1"; //setting net location flag
//checking for user domain
if (wshNet.UserDomain == "")
CleanUp("Domain must exist to connect to network!");
netdrive[type]=FindDrive()+":";
logfile.WriteLine(Date()+"\t(*) Mapping "+parm+" to "+netdrive[type]);
try{
wshNet.MapNetworkDrive(netdrive[type],parm);
}
catch(e)
{
Wasnet="0";
if (type == 0)
CleanUp("Error connecting to "+parm+"\n\nCheck the OPK Location manually before running the script again!");
else
CleanUp("Error connecting to "+parm+"\n\nCheck the Windows XP Location manually before running the script again!");
}
var Newname = netdrive[type]; //+ parm.substring(1,parm.length);
return Newname;
}
else //its a drive (ie not a net connection
{
var Drive_Letter=parm.substring(0,1);
//CHK :checks to see if drive exists
if (!fso.DriveExists(Drive_Letter))
CleanUp("Didn't find drive "+Drive_Letter);
var oDrive=fso.GetDrive(Drive_Letter); //get obj for that drive
//CHK: checks if drive is ready
if (!oDrive.IsReady)
CleanUp("Drive not ready. Verify that the drive you specified is working properly.");
return parm;
}
}/*Check_Loc(parm)*/
function Change_Startup()
{
///////////////////////
//opens winpesys.inf (or corresponding file) to change startnet.cmd to autoexec.cmd
//will always happen
var setupreg = fso.OpenTextFile(Temp_Loc+"\\"+startfile,1,false,-1); //opens in Unicode
//opening tempfile to change to winpesys.inf after making changes
var newsetupreg = fso.CreateTextFile(Temp_Loc+"\\newsetupreg.inf",true,true); //write in Unicode
var replacethis="HKLM,\"Setup\",\"CmdLine\",,\"cmd.exe /k startnet.cmd\"";
while (!setupreg.AtEndOfStream)
{
line = setupreg.ReadLine();
if ( line != replacethis)
newsetupreg.WriteLine(line);
else
newsetupreg.WriteLine("HKLM,\"Setup\",\"CmdLine\",,\"cmd.exe /k autoexec.cmd\"");
}
setupreg.Close();
newsetupreg.Close();
fso.DeleteFile(Temp_Loc+"\\"+startfile); //deletes old setupreg
wshShell.Run("cmd /c ren "+Temp_Loc+"\\newsetupreg.inf "+startfile,1,true);
///////////////////////
//creating autoexec.cmd
var autoexec = fso.CreateTextFile(Temp_Loc+"\\autoexec.cmd",true);
autoexec.WriteLine("@echo off");
autoexec.Close();
///////////////////////
//opening autoexec.cmd for startup commands in winpe
autoexec= fso.OpenTextFile(Temp_Loc+"\\autoexec.cmd",8);
var custfilename="";
//for startnet.cmd or custom file
if ( Startup.toLowerCase() == "startnet.cmd" || Startup == "")
{
autoexec.WriteLine("call startnet.cmd");
custfilename="startnet.cmd";
}
else
{
//removing path etc before filename
custfilename = Startup.substring(Startup.lastIndexOf("\\")+1,Startup.length);
fso.CopyFile(Startup,Temp_Loc+"\\");
autoexec.WriteLine("call "+custfilename);
}
autoexec.Close();
///////////////////////
//now gonna hack extra.inf so that autoexec.cmd and other files are added to WinPE Image
var xtra= fso.OpenTextFile(Temp_Loc+"\\extra.inf",1,false,-1); //opens in unicode
var newextra = fso.CreateTextFile(Temp_Loc+"\\newextra.txt",true,true); //writes in unicode
while (!xtra.AtEndOfStream)
{
line = xtra.ReadLine();
if ( line == "[ExtraFiles]")
{
newextra.WriteLine(line);
newextra.WriteLine("autoexec.cmd=1,,,,,,,,0,0,,1,2"); // adds autoexec.cmd
newextra.WriteLine(custfilename+"=1,,,,,,,,0,0,,1,2"); // adds startnet.cmd or other file
}
else
{
newextra.WriteLine(line);
}
}
xtra.Close();
newextra.Close();
fso.DeleteFile(Temp_Loc+"\\extra.inf"); //deletes old setupreg
wshShell.Run("cmd /c ren "+Temp_Loc+"\\newextra.txt extra.inf ",1,true); //renaming
logfile.WriteLine(Date()+"\t(S) Fixed "+startfile+" to run "+custfilename+" when WinPE starts up.");
return;
}/*Change_Startup()*/
function Change_Winbom()
{
//don't need to mess with it - ie for default
if (Winbom.toLowerCase() == "winbom.ini" || Winbom == "")
return;
fso.CopyFile(Winbom,Temp_Loc+"\\",true);
logfile.WriteLine(Date()+"\t(S) Using custom winbom.ini located at "+Winbom);
return;
}/*Change_Winbom()*/
function Image_Dest()
{
logfile.WriteLine(Date()+"\t(*) Now running mkimg.cmd");
switch(Image_Destination.toUpperCase())
{
case "CD":
if (Dest_Name == "")
Dest_Name = Default_ISO_Name;
if (Arch.toLowerCase() == "ia64")
wshShell.Popup("Now creating 64-bit CD image. Place floppy in drive a: and click OK!",delaywait+20,Title,vbOKOnly);
//CommandLine="cmd /c cd "+Temp_Loc+" & mkimg.cmd "+XP_Location +" "+Home_Drv+"\\testimage \""+Dest_Name+"\"";
//before it was like this..now changed cause we need to add opt com's after running mkimg and to make .iso need to do extra stuff
CommandLine="cmd /c cd "+Temp_Loc+" & mkimg.cmd "+XP_Location +" "+Home_Drv+"\\testimage ";
wshShell.Run(CommandLine,1,true);
Install_COM();
Fix_Autoexec();
Make_ISO(); //makes the .iso file
fso.DeleteFolder(Home_Drv+"\\testimage");
break;
case "HDD":
if (Dest_Name == "")
Dest_Name = Default_Dest_Name;
wshShell.Run("cmd /c "+Temp_Loc.substring(0,2),1,true);
CommandLine="cmd /c cd "+Temp_Loc+" & mkimg.cmd "+XP_Location+" \""+Dest_Name+"\"";
wshShell.Run(CommandLine,1,true);
//installing optional components
Install_COM();
Fix_Autoexec();
if (Dest_Option.toLowerCase() == "bootable")
{
// installing XP command console
logfile.WriteLine(Date()+"\t(*) making HDD version of WinPE bootable!");
wshShell.Run(XP_Location+"\\"+Arch+"\\winnt32.exe /cmdcons /unattend",1,true);
//copies files to minint folder (will overwrite older minint if it exists)
//fso.CopyFolder(Dest_Name+"\\"+Arch, Home_Drv+"\\Minint",true);
wshShell.Run("xcopy "+Dest_Name+"\\"+Arch+" C:\\Minint /E /I /Y /H /F",1,true);
fso.CopyFile(Dest_Name+"\\Winbom.ini", Home_Drv+"\\",true);
wshShell.Run("cmd /c attrib -r C:\\Cmdcons\\txtsetup.sif");
wshShell.Run("xcopy C:\\Minint\\txtsetup.sif C:\\Cmdcons\\ /Y");
logfile.WriteLine(Date()+"\t(S) HDD version of WinPE in now bootable!");
}
//checks if its done
if (!fso.FolderExists(Dest_Name))
CleanUp("mkimg.cmd didn't work properly!\nCheck the parameter file "+File+" and try running the script again.");
var fc = fso.GetFolder(Dest_Name);
if (fc.Size < (std_size*1024*1024)) //is its less than 140MB then there's a prob.
CleanUp("mkimg.cmd didn't copy all necessary file!\nCheck the parameter file "+File+" and try running the script again.");
break;
default:
CleanUp("Not valid dest for image! "+Image_Destination);
break;
}
logfile.WriteLine(Date()+"\t(S) mkimg.cmd complete!");
//adding one line to autoexec.cmd
autoexec= fso.OpenTextFile(Temp_Loc+"\\autoexec.cmd",8);
autoexec.WriteLine("cd \\Minint");
autoexec.Close();
return;
}/*Image_Dest()*/
function Change_Wallpaper()
{
if (Wallpaper == "" || Wallpaper == "winpe.bmp")
return;
if(!fso.FileExists(Temp_Loc+"\\winpe.bmp"))
{
logfile.WriteLine(Date()+"\t(E) Default wallpaper file winpe.bmp doesn't exist. No wallpaper was added!");
return;
}
//delete default wallpaper
fso.DeleteFile(Temp_Loc+"\\winpe.bmp",true);
//copy custom wallpaper to Temp_Loc
fso.CopyFile(Wallpaper,Temp_Loc+"\\",true);
//rename the wallpaper file to winpe.bmp
CommandLine="cmd /c cd "+Temp_Loc+" && ren "+ Wallpaper.substring(Wallpaper.lastIndexOf("\\")+1,Wallpaper.length)+" winpe.bmp";
wshShell.Run(CommandLine,0,true);
logfile.WriteLine(Date()+"\t(S) Changed Wallpaper!");
return;
}
function FindDrive()
{
var drivefound;
var i;
for(i=25;i>-1;i--)
{
drivefound=alphabet.substring(i,i+1);
if (!fso.DriveExists(drivefound))
return drivefound;
}
CleanUp("No net connections can be made cause all drive letters are used.");
}/*FindDrive()*/
function Install_COM()
{
///////////////////////
//calling component scripts
if (Image_Destination.toUpperCase()=="CD")
temp_dest = Home_Drv+"\\testimage";
else
temp_dest = Dest_Name;
if (Com_Count != 0)
{
for(count=0;count<Com_Count;count++)
{
logfile.WriteLine(Date()+"\t(*) "+Component[count]+" is installing component.");
if(Arch.toLowerCase() == "ia64")
Return_Val = wshShell.Run(Component[count]+" /S:"+XP_Location+" /D:"+temp_dest+" /Q /64",0,true);
else
Return_Val = wshShell.Run(Component[count]+" /S:"+XP_Location+" /D:"+temp_dest+" /Q",0,true);
if (Return_Val != 0)
CleanUp(Component[count]+" component install file has error in it.");
else
logfile.WriteLine(Date()+"\t(S) "+Component[count]+" component installed.");
}
}
else
{
logfile.WriteLine(Date()+"\t(*) No optional components being installed!");
}
return;
}
function Fix_Autoexec()
{
//this function add cd \minint to end of autoexec.cmd
if (Image_Destination.toUpperCase()=="CD")
temp_dest = Home_Drv+"\\testimage";
else
temp_dest = Dest_Name;
autoexec= fso.OpenTextFile(temp_dest+"\\"+Arch+"\\system32\\autoexec.cmd",8);
autoexec.WriteLine("cd \\Minint");
autoexec.Close();
}
function Make_ISO()
{
//creating dir (if it exists nothing happens)
temp_mkdir = Dest_Name.substring(0,Dest_Name.lastIndexOf("\\") );
if (!fso.FolderExists(temp_mkdir))
{
wshShell.Run("cmd /c cd \ && mkdir "+temp_mkdir);
logfile.WriteLine(Date()+"\t(S) Created folder "+temp_mkdir+" where ISO image file will be placed!");
}
if (Arch.toLowerCase() == "ia64")
{
wshShell.Run("xcopy "+Home_Drv+"\\testimage\\"+Arch+"\\setupldr.efi a:\ 2>1>nul",1,true);
wshShell.Run("cmd /c cd "+Temp_Loc+" && dskimage.exe a: efisys.bin 2>1>nul",1,true);
wshShell.Run("cmd /c cd "+Temp_Loc+" && oscdimg.exe -n -befisys.bin "+Home_Drv+"\\testimage \""+Dest_Name+"\"",1,true);
}
else
{
CommandLine="cmd /c cd "+Temp_Loc+" && oscdimg.exe -n -betfsboot.com "+Home_Drv+"\\testimage \""+Dest_Name+"\"";
wshShell.Run(CommandLine,1,true);
}
logfile.WriteLine(Date()+"\t(S) Created ISO image file!");
}
function CleanUp(parm)
{
if (Wasnet == "1")
{
if (netdrive[0] != "")
{
CommandLine="net use "+netdrive[0]+" /del";
wshShell.Run(CommandLine);
wshShell.SendKeys("y");
}
if (netdrive[1] != "")
{
CommandLine="net use "+netdrive[1]+" /del";
wshShell.Run(CommandLine);
wshShell.SendKeys("y");
}
}
if (parm == "OK")
{
logfile.WriteBlankLines(1);
logfile.WriteLine(Date()+"\tThe new image of WinPE can be found at "+Dest_Name);
logfile.WriteLine(Date()+"\tCOMPLETE");
wshShell.Popup("Script Complete! \n",0,Title,vbInfo);
}
else
{
logfile.WriteLine(Date()+"\t(E) "+parm);
logfile.WriteBlankLines(1);
logfile.WriteLine("Script Terminated @ "+Date());
wshShell.Popup(parm+"\n\n Terminating Script!",0,Title,vbCritical);
}
// deleting temp storage folder
if (fso.FolderExists(Temp_Loc))
{
try{fso.DeleteFolder(Temp_Loc); }
catch(e){ wshShell.Popup("Can't delete "+Temp_Loc,0,Title,vbInfo);}
}
logfile.Close(); //closing logfile
WScript.Quit();
}/*CleanUp(parm)*/