mirror of https://github.com/tongzx/nt5src
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
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)*/
|