Collection_main.js 84 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976
  1. /*
  2. Collection_main.js v19.1
  3. This script is used to search for all the installed instances of Oracle
  4. products in the target system.
  5. */
  6. /**
  7. * main
  8. */
  9. //Set up use of Env variables
  10. var WshShell = WScript.CreateObject("WScript.Shell");
  11. var fso = new ActiveXObject("Scripting.FileSystemObject");
  12. var SYSTEM_FOLDER = 1;
  13. var TEMP_FOLDER = 2;
  14. var wbemFlagReturnImmediately = 0x10;
  15. var wbemFlagForwardOnly = 0x20;
  16. //Get the Temp folder
  17. try {
  18. var tfolder = fso.GetSpecialFolder(TEMP_FOLDER);
  19. } catch(e) {
  20. var tfolder = fso.getFolder(".").path +"\\temp";
  21. }
  22. //declare and initialize vars
  23. // Script descrptive vars
  24. var SCRIPT_VERSION = "19.1"
  25. var CT_BUILD_VERSION = "19.1"
  26. var SCRIPT_NAME = "Collection_main.js"
  27. var SCRIPT_OPTIONS = WScript.Arguments;
  28. //CT vars
  29. var MACHINE_NAME = WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%");
  30. var CT_HOME = fso.getFolder(".").path;
  31. var CT_PID = get_pid();
  32. var CT_TMP = tfolder + "\\ct_tmp_" + MACHINE_NAME + "_" + CT_PID + "\\";
  33. var OUTPUT_DIR = CT_HOME + "\\output\\";
  34. var CT_DEBUG = ""
  35. var SEARCH_DIR = GetDriveList();
  36. var OUTPUT_DEBUG = "";
  37. var DEBUG = false;
  38. var LICAGREE = false;
  39. var COLLECT_CT_DEBUG = true;
  40. var PRODLIST = "";
  41. var FASTSEARCH = false;
  42. var REMOTE_DB = "";
  43. var MASK_DATA = "";
  44. var ForReading = 1;
  45. var TristateFalse = 0;
  46. var ForWriting = 2, ForAppending = 8;
  47. var SEARCH_COMMAND = "";
  48. var WARNING_EMPTY = false;
  49. var ERRORS_EMPTY = false;
  50. //Product File lists and variables
  51. var ALLSEARCHFILES = "";
  52. var PRODUCTLIST = "";
  53. var ALLPRODLIST = "";
  54. var RUNLIST = "";
  55. var RUNCPUQ = "";
  56. var RANCPUQ = "false";
  57. var PROCESSLIST = "";
  58. var CMDOUTFILELIST = "";
  59. var COMPLETEPRODLIST = "";
  60. var BUNDLEFILES="";
  61. var TSFILES="";
  62. var TAILFILES="";
  63. var LISTINGFILES="";
  64. var COPYFILES="";
  65. var LOGFILES="";
  66. var CT_HOMES="";
  67. var CT_HOMES_arr="";
  68. var PRODUCTSRUN="";
  69. var COLLECTRMDATAFILES="";
  70. //debug and error files
  71. var CT_DEBUG_FILE_fname = "";
  72. var CT_DEBUG_FILE = "";
  73. // check the command line arguements.
  74. checkArguments(SCRIPT_OPTIONS);
  75. try
  76. {
  77. createDirectoryFromPath(CT_TMP);
  78. }
  79. catch (exception)
  80. {
  81. WINDOWSCMDERR.WriteLine("The directory " + CT_TMP + " can not be created. Exception:" + exception);
  82. }
  83. if ( !fso.FolderExists(CT_TMP + "logs\\") )
  84. {
  85. try
  86. {
  87. createDirectoryFromPath(CT_TMP + "logs\\");
  88. }
  89. catch (exception)
  90. {
  91. echo_logs("CT: CT-00110: WARNING: The directory " + CT_TMP + "logs\\ does not exist and can not be created.","Warnings");
  92. }
  93. }
  94. WScript.echo(CT_TMP + "logs\\");
  95. CT_DEBUG = CT_TMP + "\\debug\\";
  96. try
  97. {
  98. createDirectoryFromPath(CT_DEBUG);
  99. }
  100. catch (exception)
  101. {
  102. WINDOWSCMDERR.WriteLine("The directory " + CT_DEBUG + " can not be created. Exception:" + exception);
  103. }
  104. if ( DEBUG )
  105. debugWarning();
  106. credentialValidation();
  107. // print license if customer doesn't use -L Y
  108. if ( !LICAGREE ) {
  109. runCommand("more ..\\resources\\util\\license_agreement.txt && pause", 1);
  110. WScript.StdOut.Write("\n\n Do you accept the license agreement (y|n)");
  111. var ANSWER = WScript.StdIn.ReadLine();
  112. var licAgreeLoop = true;
  113. while ( licAgreeLoop ) {
  114. switch ( ANSWER )
  115. {
  116. case "Y" :
  117. case "y" :
  118. licAgreeLoop = false;
  119. break;
  120. case "n" :
  121. case "N" :
  122. printArgUsage();
  123. echo_logs("CT: CT-00102: WARNING: You must accept the license agreement to continue.","Warnings");
  124. licAgreeLoop = false;
  125. WScript.Quit(1);
  126. break;
  127. default :
  128. WScript.StdOut.Write("Invalid option, please use y or n. Do you accept the license agreement (y|n)");
  129. ANSWER = WScript.StdIn.ReadLine();
  130. }
  131. }
  132. }
  133. var OUTPUT_DIR_FSO = fso.getFolder(OUTPUT_DIR);
  134. var CT_FILES_fname = CT_TMP + "logs\\CTfiles.txt";
  135. //var CT_FILES = fso.OpenTextFile(CT_FILES_fname, ForWriting, "True");
  136. var CT_SORTED_FILES_fname = CT_TMP + "logs\\CTsortedfiles.txt";
  137. //var CT_SORTED_FILES = fso.OpenTextFile(CT_SORTED_FILES_fname, ForWriting, "True");
  138. var CT_MACHINFO_FILE_fname = CT_TMP + "logs\\" + MACHINE_NAME + "-info.txt";
  139. var CT_MACHINFO_FILE = fso.OpenTextFile(CT_MACHINFO_FILE_fname, ForWriting, "True");
  140. var CT_LOGS_FILE_fname = CT_TMP + "logs\\CTlogfiles.txt";
  141. var CT_LOGS_FILE = fso.OpenTextFile(CT_LOGS_FILE_fname, ForWriting, "True");
  142. var CMDFILE_fname = CT_TMP + "logs\\OraCmdList.txt";
  143. var CMDFILE = fso.OpenTextFile(CMDFILE_fname, ForWriting, "True");
  144. var CMDOUTFILE_fname = CT_TMP + "logs\\OraCmdOutFileList.txt";
  145. var CMDOUTFILE = fso.OpenTextFile(CMDOUTFILE_fname, ForWriting, "True");
  146. var WINDOWSCMDERR_fname = CT_TMP + "logs\\windowscmderrs.txt";
  147. var WINDOWSCMDERR = fso.OpenTextFile(WINDOWSCMDERR_fname, ForWriting, "True");
  148. // results file
  149. var CT_RESULTS_FILE_fname = CT_TMP + "logs\\Collection-" + MACHINE_NAME + ".txt";
  150. var CT_RESULTS_FILE = fso.OpenTextFile(CT_RESULTS_FILE_fname, ForWriting, "True");
  151. var CT_ACTIONS_RESULTS_FILE_fname = CT_TMP + "logs\\Collection-Actions-" + MACHINE_NAME + ".txt";
  152. var CT_ACTIONS_RESULTS_FILE = fso.OpenTextFile(CT_ACTIONS_RESULTS_FILE_fname, ForWriting, "True");
  153. var CT_COLLECTED_FILE_fname = CT_TMP + "logs\\CT_collected.log";
  154. var CT_COLLECTED_FILE = fso.OpenTextFile(CT_COLLECTED_FILE_fname, ForWriting, "True");
  155. var CT_WARNINGS_FILE_fname = CT_TMP + "logs\\CT_warnings.log";
  156. var CT_WARNINGS_FILE = fso.OpenTextFile(CT_WARNINGS_FILE_fname, ForWriting, "True");
  157. var CT_ERRORS_FILE_fname = CT_TMP + "logs\\CT_errors.log";
  158. var CT_ERRORS_FILE = fso.OpenTextFile(CT_ERRORS_FILE_fname, ForWriting, "True");
  159. var CT_HOMES_FILE_fname = CT_TMP + "logs\\Collection-" + MACHINE_NAME + "-CT_Homes.txt";
  160. var CT_HOMES_FILE = fso.OpenTextFile(CT_HOMES_FILE_fname, ForWriting, "True");
  161. var CT_RESULTS_SUMMARY_FILE_fname = CT_TMP + "logs\\results_summary.log";
  162. var CT_RESULTS_SUMMARY_FILE = fso.OpenTextFile(CT_RESULTS_SUMMARY_FILE_fname, ForWriting, "True");
  163. PRODLIST = PRODLIST.slice(0,-1);
  164. var scriptOptions = "";
  165. for (var ii = 0; ii < SCRIPT_OPTIONS.length; ii++)
  166. scriptOptions += SCRIPT_OPTIONS(ii) + " ";
  167. // get the Products to be searched for
  168. try {
  169. getProducts();
  170. } catch(e) {
  171. WINDOWSCMDERR.WriteLine("Exception during getProducts function processing. Exception "+ e.description);
  172. }
  173. //parse and set search files and process list
  174. try {
  175. parseProductFiles();
  176. } catch(e) {
  177. WINDOWSCMDERR.WriteLine("Exception during parseProductFiles function processing. Exception "+ e.description);
  178. }
  179. // export the output dir for child process only.
  180. var wshSystemEnv = WshShell.Environment( "PROCESS" );
  181. wshSystemEnv("OUTPUT_DIR") = OUTPUT_DIR;
  182. wshSystemEnv("PRODLIST") = PRODLIST;
  183. wshSystemEnv("ALLPRODLIST") = ALLPRODLIST;
  184. wshSystemEnv("PRODUCTLIST") = PRODUCTLIST;
  185. wshSystemEnv("LICAGREE") = LICAGREE;
  186. wshSystemEnv("SCRIPT_OPTIONS") = scriptOptions;
  187. wshSystemEnv("REMOTE_DB") = REMOTE_DB;
  188. wshSystemEnv("CT_BUILD_VERSION") = CT_BUILD_VERSION;
  189. wshSystemEnv("CT_TMP") = CT_TMP;
  190. wshSystemEnv("CT_HOME") = CT_HOME;
  191. // Run CPUQ before machine info section
  192. if ( RUNLIST.indexOf("cpuq_main") != -1 ) {
  193. doRunCmd(RUNCPUQ);
  194. RANCPUQ = "true";
  195. }
  196. //Generate a machine summary file
  197. try {
  198. printMachineInfo();
  199. } catch(e) {
  200. WINDOWSCMDERR.WriteLine("Exception during printMachineInfo function processing. Exception "+ e.description);
  201. }
  202. //Generate a list for fastsearch option
  203. if ( ALLPRODLIST.indexOf("WLS") != -1 )
  204. {
  205. try {
  206. getDefaultOracleEnv();
  207. } catch(e) {
  208. WINDOWSCMDERR.WriteLine("Exception during getDefaultOracleEnv function processing. Exception "+ e.description);
  209. }
  210. }
  211. //search start time
  212. var SEARCH_START = new Date();
  213. var SEARCH_FINISH;
  214. // find all the files on the target system; skip search if there are no search files
  215. if ( ALLSEARCHFILES != "" )
  216. {
  217. try {
  218. doSearch();
  219. } catch(e) {
  220. WINDOWSCMDERR.WriteLine("Exception during doSearch function processing. Exception "+ e.description);
  221. }
  222. SEARCH_FINISH = new Date();
  223. WScript.echo("CT file search started at " + SEARCH_START + "and finished at " +SEARCH_FINISH);
  224. } else {
  225. SEARCH_FINISH = new Date();
  226. }
  227. //# print search information
  228. CT_MACHINFO_FILE.WriteLine("[BEGIN SEARCH INFO]");
  229. CT_MACHINFO_FILE.WriteLine("Search start=" + SEARCH_START);
  230. CT_MACHINFO_FILE.WriteLine("Search command=" + SEARCH_COMMAND);
  231. CT_MACHINFO_FILE.WriteLine("Search finish=" + SEARCH_FINISH);
  232. CT_MACHINFO_FILE.WriteLine("[END SEARCH INFO]");
  233. // Run the specified Commands or scripts
  234. try {
  235. doRunCmd(RUNLIST);
  236. } catch(e) {
  237. WINDOWSCMDERR.WriteLine("Exception during doRunCmd(RUNLIST) function processing. Exception "+ e.description);
  238. }
  239. // Clean up the file list get rid of non Oracle config.xml and registry.xml
  240. try {
  241. fileGetCTFiles();
  242. } catch(e) {
  243. WINDOWSCMDERR.WriteLine("Exception during fileGetCTFiles function processing. Exception "+ e.description);
  244. }
  245. // package CT_SORTED_FILES results for post-processing
  246. try {
  247. fileAction();
  248. } catch(e) {
  249. WINDOWSCMDERR.WriteLine("Exception during fileAction function processing. Exception "+ e.description);
  250. }
  251. try
  252. {
  253. //Add the WLST "compare_result.txt" file to the zip
  254. if ( fso.FileExists("compare_result.txt") )
  255. fso.CopyFile("compare_result.txt", CT_TMP + "logs\\compare_result.txt");
  256. } catch (exception)
  257. {
  258. echo_logs("CT: CT-00125: WARNING: Error copying output files. Exception: " + exception.description,"Warnings");
  259. }
  260. //Generate a list of FMWHomes collected
  261. if ( ALLPRODLIST.indexOf("WLS") != -1 )
  262. {
  263. try {
  264. getDefaultOracleEnv();
  265. } catch(e) {
  266. }
  267. }
  268. //Generate a list of config locations collected
  269. if ( ALLPRODLIST.indexOf("WLS") != -1 )
  270. {
  271. try {
  272. configsCollected();
  273. } catch(e) {
  274. WINDOWSCMDERR.WriteLine("Exception during configsCollected function processing. Exception "+ e.description);
  275. }
  276. }
  277. //close the file objects and delete the files.
  278. CT_MACHINFO_FILE.Close();
  279. CT_LOGS_FILE.Close();
  280. CMDFILE.Close();
  281. CMDOUTFILE.Close();
  282. CT_DEBUG_FILE.Close();
  283. CT_RESULTS_FILE.Close();
  284. CT_ACTIONS_RESULTS_FILE.Close();
  285. //mask data if required.
  286. if ( MASK_DATA == "all" || MASK_DATA == "IP" || MASK_DATA == "ip" || MASK_DATA == "user" )
  287. {
  288. WScript.Echo("\nMasking sensitive data ...........\n");
  289. try {
  290. maskResults();
  291. } catch(e) {
  292. echo_logs("CT: CT-00120: WARNING: Exception during maskResults function processing. Exception "+ e.description,"Warnings");
  293. }
  294. }
  295. //Clear screen before last messages
  296. WScript.Echo("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  297. //print output to screen
  298. try {
  299. printResults();
  300. } catch(e) {
  301. WINDOWSCMDERR.WriteLine("Exception during printResults function processing. Exception "+ e.description);
  302. }
  303. // close and delete unecessary logs files
  304. CT_ERRORS_FILE.Close();
  305. CT_COLLECTED_FILE.Close();
  306. CT_WARNINGS_FILE.Close();
  307. CT_HOMES_FILE.Close();
  308. CT_RESULTS_SUMMARY_FILE.Close();
  309. WINDOWSCMDERR.Close();
  310. // mv files to debug
  311. try
  312. {
  313. debugFiles = ShowFiles(CT_TMP + "logs\\");
  314. } catch (e) {
  315. WScript.Echo("CT: CT-00122: WARNING: Exception during listing of debug files. Exception "+ e.description);
  316. }
  317. // loop through each of the files in the folder
  318. for (; !debugFiles.atEnd(); debugFiles.moveNext())
  319. {
  320. fname = debugFiles.item();
  321. shortFname = fso.GetBaseName(fname);
  322. extFname = fso.GetExtensionName(fname);
  323. if ( ALLPRODLIST.indexOf("WLS") != -1 || ALLPRODLIST.indexOf("OAS") != -1 || ALLPRODLIST.indexOf("Tuxedo") != -1 || ALLPRODLIST.indexOf("OBI") != 1 )
  324. {
  325. if ( shortFname != "db_list" && fname != CT_RESULTS_FILE_fname && fname != CT_MACHINFO_FILE_fname && fname != CT_LOGS_FILE_fname ) {
  326. try
  327. {
  328. fso.MoveFile(fname,CT_DEBUG + "\\" + shortFname + "." + extFname);
  329. } catch (e) {
  330. WScript.Echo("CT: CT-00124: WARNING: Exception during moving of debug files. Exception "+ e.description);
  331. }
  332. }
  333. } else {
  334. if ( shortFname != "db_list" )
  335. {
  336. try
  337. {
  338. fso.MoveFile(fname,CT_DEBUG + "\\" + shortFname + "." + extFname);
  339. } catch (e) {
  340. WScript.Echo("CT: CT-00124: WARNING: Exception during moving of debug files. Exception "+ e.description);
  341. }
  342. }
  343. }
  344. }
  345. var currentdate = new Date();
  346. var ZIPTIMESTAMP ="." + currentdate.getFullYear()
  347. + (currentdate.getMonth()+1)
  348. + currentdate.getDate() + "_"
  349. + currentdate.getHours()
  350. + currentdate.getMinutes()
  351. + currentdate.getSeconds();
  352. //Compress the debug files
  353. if ( COLLECT_CT_DEBUG )
  354. {
  355. try {
  356. zipDebug();
  357. } catch(e) {
  358. WScript.Echo("CT: CT-00123: WARNING: Exception during zipDebug function processing. Exception "+ e.description);
  359. }
  360. }
  361. if ( PRODLIST === "CPUQ," ) {
  362. try {
  363. fso.DeleteFolder(CT_TMP + "logs");
  364. } catch (e)
  365. {
  366. }
  367. }
  368. //Compress the Results file
  369. try {
  370. zipFiles();
  371. } catch(e) {
  372. WScript.Echo("CT: CT-00121: WARNING: Exception during zipFiles function processing. Exception "+ e.description);
  373. }
  374. if ( fso.FileExists("compare_result.txt") )
  375. {
  376. fso.DeleteFile("compare_result.txt");
  377. }
  378. if ( fso.FolderExists(CT_TMP) )
  379. {
  380. try {
  381. fso.DeleteFolder(CT_TMP.slice(0,-1));
  382. } catch (e)
  383. {
  384. }
  385. }
  386. //destroy the FSO object
  387. fso = null;
  388. /*############################ End MAIN ############################*/
  389. /*
  390. ********************User Command Line Management Utilities*********************
  391. */
  392. /**
  393. * function to print the command line options syntax
  394. */
  395. function printArgUsage()
  396. {
  397. var argUsage = new Array ();
  398. argUsage = ["-d search_dir [-p product] [-o full_path_dir_name] [-debug true|false] [-m all|ip|user]",
  399. " [-L Y|y|N|n] [-fastsearch] [-tns] [-t full_path_dir_name] \n",
  400. "-d Specifiy the directories to be searched for the installations.",
  401. " A quoted string of directory names separated by a comma is required for",
  402. " when more than 1 directory is to be searched. The default is all fixed ",
  403. " or local drives. i.e. c:\,d:\ and not the CDROM or NFS drives.\n",
  404. "-o Option to output the collected files to the directory",
  405. " given by <full_path_dir_name>. The option should be a full path name.",
  406. " It will be named Collection-<MACHINE_NAME>.zip.",
  407. " If not specified, default is the output directory where the tool is located.\n",
  408. "-debug [true|false] Option to turn on debugging information. Default is false.\n",
  409. "-m Option to turn on masking of sensitive information.",
  410. " Perl needs to be in the system path for this to run. Default is off.",
  411. " It can mask username/password combinations or IP addressess, ",
  412. " see README.txt for details.\n",
  413. "-L Option to agree to license agreement without having it displayed.",
  414. " Default is off, the License Agreement will be printed to the screen.\n",
  415. " ***USE OF THIS OPTION IMPLIES LICENSE ACCEPTENCE.***\n",
  416. "-p Option to pass in a list of Oracle products to look for.",
  417. " valid options include:",
  418. " all,FormsReports,OAS,WLS,SOA,Tuxedo,CPUQQ,DB,EBS,",
  419. " WLSNUP,WLSBasic,OBI,Webcenter\n",
  420. "-fastsearch Option to auto detect Oracle product directories on the system.",
  421. " Note: The fast search option of Collection Tool is intended to",
  422. " gather information from the system with minimal file searching.\n",
  423. "-tns Option to switch from the automatic local database connection",
  424. " mode (the default) to an interactive remote database connection",
  425. " mode, via database listener. The tool prompts for connection",
  426. " description details (e.g. listener host, port, etc), database",
  427. " user and password, then connects to the remote database using ",
  428. " SQL*Plus and collects the data for the selected products",
  429. " DB, EBS). Multiple databases can be collected.",
  430. " This mode cannot be used together with the silent mode (-L Y).\n",
  431. "-t Option to set the Collection Tool temporary output to files in the",
  432. " directory specified by full_path_dir_name. The option should",
  433. " be a full pathname. The files will be deleted at the end of the CT",
  434. " run. If not specified default is the Windows %TMP% directory.\n"];
  435. for (var ii=0;ii<argUsage.length;ii++)
  436. {
  437. WScript.Echo(argUsage[ii]);
  438. }
  439. }
  440. /**
  441. * function to syntax check and process the command line options
  442. */
  443. function checkArguments( argVals )
  444. {
  445. var dEnum, folder;
  446. var searchDirs = new Array();
  447. for ( var ii=0; ii<argVals.length;ii++)
  448. {
  449. if ( argVals.Item(ii).indexOf("-") == 0 )
  450. {
  451. switch ( argVals.Item(ii) )
  452. {
  453. case "-d" :
  454. try {
  455. SEARCH_DIR = argVals.Item(ii +1);
  456. } catch (exception)
  457. {
  458. printArgUsage();
  459. echo_logs("CT: CT-00002: ERROR: No argument provided to the -d parameter.","Errors");
  460. WScript.Quit(1);
  461. }
  462. if ( SEARCH_DIR.indexOf(",") >= 0 )
  463. {
  464. searchDirs = SEARCH_DIR.split(',');
  465. for (var jj=0; jj<searchDirs.length; jj++)
  466. {
  467. folder = searchDirs[jj];
  468. if ( !fso.FolderExists(folder) )
  469. {
  470. printArgUsage();
  471. echo_logs("CT: CT-00001: ERROR: Argrument search directory " + searchDirs[jj] + " does not exist or is not readable.","Errors");
  472. WScript.Quit(1);
  473. }
  474. }
  475. }
  476. else
  477. {
  478. folder = SEARCH_DIR;
  479. if ( !fso.FolderExists(folder) )
  480. {
  481. printArgUsage();
  482. echo_logs("CT: CT-00001: ERROR: Argrument search directory " + SEARCH_DIR + " does not exist or is not readable.","Errors");
  483. WScript.Quit(1);
  484. }
  485. }
  486. break;
  487. case "-o" :
  488. try {
  489. OUTPUT_DIR = argVals.Item(ii +1);
  490. } catch (exception)
  491. {
  492. printArgUsage();
  493. echo_logs("CT: CT-00005: ERROR: No argument provided to the -o parameter.","Errors");
  494. WScript.Quit(1);
  495. }
  496. if ( OUTPUT_DIR.charAt(OUTPUT_DIR.length-1) != "\\" )
  497. {
  498. OUTPUT_DIR += "\\";
  499. }
  500. if ( !fso.FolderExists(OUTPUT_DIR) )
  501. {
  502. if(!OUTPUT_DIR.charAt(0).match(/^[a-zA-Z]/)) {
  503. printArgUsage();
  504. echo_logs("CT: CT-00024: ERROR: Output directory: " + OUTPUT_DIR + ", is not a valid Windows Full path name.","Errors");
  505. WScript.Echo();
  506. WScript.Quit(1);
  507. } else if(!OUTPUT_DIR.charAt(1).match(/^[:]/) || !OUTPUT_DIR.charAt(2).match(/^[\/\\]/)) {
  508. printArgUsage();
  509. echo_logs("CT: CT-00024: ERROR: Output directory: " + OUTPUT_DIR + ", is not a valid Windows Full path name.","Errors");
  510. WScript.Quit(1);
  511. } else {
  512. try
  513. {
  514. createDirectoryFromPath(OUTPUT_DIR);
  515. }
  516. catch (exception)
  517. {
  518. printArgUsage();
  519. echo_logs("CT: CT-00025: ERROR: The directory " + OUTPUT_DIR + " does not exist and can not be created.\n Please chose a different directory or create it outside of Collection Tool.","Errors");
  520. WScript.Quit(1);
  521. }
  522. }
  523. }
  524. break;
  525. case "-debug" :
  526. try {
  527. OUTPUT_DEBUG = argVals.Item(ii +1);
  528. } catch (exception)
  529. {
  530. printArgUsage();
  531. echo_logs("CT: CT-00002: ERROR: No argument provided to the -d parameter.","Errors");
  532. WScript.Quit(1);
  533. }
  534. if ( OUTPUT_DEBUG == "true" )
  535. DEBUG = true;
  536. else
  537. DEBUG = false;
  538. break;
  539. case "-fastsearch" :
  540. FASTSEARCH = true;
  541. break;
  542. case "-tns" :
  543. REMOTE_DB = "YES";
  544. break;
  545. case "-L" :
  546. try {
  547. LICAGREE = argVals.Item(ii +1);
  548. } catch (exception)
  549. {
  550. printArgUsage();
  551. echo_logs("CT: CT-00008: ERROR: No argument provided to the -L parameter.","Errors");
  552. WScript.Quit(1);
  553. }
  554. if ( LICAGREE == "Y" || LICAGREE == "y" )
  555. LICAGREE = true;
  556. else
  557. LICAGREE = false;
  558. break;
  559. case "-p" :
  560. try {
  561. PRODLIST = argVals.Item(ii +1);
  562. } catch (exception)
  563. {
  564. printArgUsage();
  565. echo_logs("CT: CT-00009: ERROR: No argument provided to the -p parameter.","Errors");
  566. WScript.Quit(1);
  567. }
  568. // make sure PRODLIST end with a ","
  569. if ( PRODLIST.charAt( PRODLIST.length-1 ) != "," )
  570. PRODLIST += ",";
  571. if ( PRODLIST != "all," ) {
  572. var PROD_ARRAY = PRODLIST.split(',');
  573. for (var jj=0; jj<PROD_ARRAY.length; jj++)
  574. {
  575. folder = "..\\resources\\products\\" + PROD_ARRAY[jj];
  576. if ( !fso.FolderExists(folder) )
  577. {
  578. printArgUsage();
  579. echo_logs("CT: CT-00010: ERROR: " + PROD_ARRAY[jj] + " is not a valid product family.","Errors");
  580. WScript.Quit(1);;
  581. }
  582. }
  583. }
  584. break;
  585. case "-m" :
  586. try {
  587. MASK_DATA = argVals.Item(ii +1);
  588. } catch (exception)
  589. {
  590. printArgUsage();
  591. echo_logs("CT: CT-00011: ERROR: Valid option not chosen for the -m mask parameter.","Errors");
  592. WScript.Quit(1);
  593. }
  594. if ( MASK_DATA == "all" || MASK_DATA == "IP" || MASK_DATA == "ip" || MASK_DATA == "user")
  595. {
  596. //options match, do nothing.
  597. }
  598. else
  599. {
  600. printArgUsage();
  601. echo_logs("CT: CT-00011: ERROR: Valid option not chosen for the -m mask parameter.","Errors");
  602. WScript.Quit(1);
  603. }
  604. var perlError;
  605. var perlDocsError;
  606. perlError = runCommand("perl -v", 0 );
  607. if ( perlError > 0 ) {
  608. printArgUsage();
  609. echo_logs("CT: CT-00012: ERROR: Perl was not found in the system path.\nPlease review the documentation for masking requirements.","Errors");
  610. WScript.Quit(1);
  611. } else {
  612. perlDocsError = runCommand("perldoc -l Digest::SHA", 0 );
  613. if ( perlDocsError > 0 ) {
  614. printArgUsage();
  615. echo_logs("CT: CT-00013: ERROR: Cannot find a perl with Digest::SHA installed.\nPlease review the documentation for masking requirements.","Errors");
  616. WScript.Quit(1);
  617. }
  618. }
  619. break;
  620. case "-t" :
  621. try {
  622. CT_TMP = argVals.Item(ii +1);
  623. } catch (exception)
  624. {
  625. printArgUsage();
  626. echo_logs("CT: CT-00017: ERROR: No argument provided to the -t parameter.","Errors");
  627. WScript.Quit(1);
  628. }
  629. CT_TMP = argVals.Item(ii +1);
  630. if ( CT_TMP.charAt(CT_TMP.length-1) != "\\" )
  631. {
  632. CT_TMP += "\\";
  633. }
  634. CT_TMP = CT_TMP + "ct_tmp_" + MACHINE_NAME + "_" + CT_PID + "\\";
  635. if ( !fso.FolderExists(CT_TMP) )
  636. {
  637. if(!CT_TMP.charAt(0).match(/^[a-zA-Z]/)) {
  638. printArgUsage();
  639. echo_logs("CT: CT-00028: ERROR: Output directory: " + CT_TMP + ", is not a valid Windows Full path name.","Errors");
  640. WScript.Echo();
  641. WScript.Quit(1);
  642. } else if(!CT_TMP.charAt(1).match(/^[:]/) || !CT_TMP.charAt(2).match(/^[\/\\]/)) {
  643. printArgUsage();
  644. echo_logs("CT: CT-00028: ERROR: Output directory: " + CT_TMP + ", is not a valid Windows Full path name.","Errors");
  645. WScript.Quit(1);
  646. } else {
  647. try
  648. {
  649. createDirectoryFromPath(CT_TMP);
  650. }
  651. catch (exception)
  652. {
  653. printArgUsage();
  654. echo_logs("CT: CT-00029: ERROR: The directory " + CT_TMP + " does not exist and can not be created.\n Please chose a different directory or create it outside of Collection Tool.","Errors");
  655. WScript.Quit(1);
  656. }
  657. }
  658. }
  659. break;
  660. default :
  661. printArgUsage();
  662. echo_logs("CT: CT-00015: ERROR: " + argVals.Item(ii) + " is an invalid entry.","Errors");
  663. WScript.Quit(1);
  664. }
  665. }
  666. }
  667. if ( REMOTE_DB == "YES" && LICAGREE ) {
  668. printArgUsage();
  669. echo_logs("CT: CT-00016: ERROR: -tns option cannot be used together with silent mode (-L Y)","Errors");
  670. WScript.Quit(1);
  671. }
  672. if ( !fso.FolderExists(OUTPUT_DIR) )
  673. {
  674. try
  675. {
  676. createDirectoryFromPath(OUTPUT_DIR);
  677. }
  678. catch (exception)
  679. {
  680. echo_logs("CT: CT-00109: WARNING: The directory " + OUTPUT_DIR + "\\output\\ does not exist and can not be created.","Warnings");
  681. }
  682. }
  683. if ( PRODLIST.indexOf("all") != -1 || PRODLIST.indexOf("WLS,") != -1 || PRODLIST.indexOf("FMW") != -1 || PRODLIST.indexOf("OAS") != -1 )
  684. {
  685. try
  686. {
  687. createDirectoryFromPath(CT_TMP + "FMW\\");
  688. }
  689. catch (exception)
  690. {
  691. echo_logs("CT: CT-00109: WARNING: The directory " + CT_TMP + "FMW\\ does not exist and can not be created.","Warnings");
  692. }
  693. }
  694. if ( !fso.FolderExists(CT_TMP + "logs\\") )
  695. {
  696. try
  697. {
  698. createDirectoryFromPath(CT_TMP + "logs\\");
  699. }
  700. catch (exception)
  701. {
  702. echo_logs("CT: CT-00110: WARNING: The directory " + CT_TMP + "logs\\ does not exist and can not be created.","Warnings");
  703. }
  704. }
  705. CT_DEBUG = CT_TMP + "debug\\";
  706. if ( !fso.FolderExists( CT_DEBUG ) )
  707. {
  708. try
  709. {
  710. createDirectoryFromPath( CT_DEBUG );
  711. }
  712. catch (exception)
  713. {
  714. echo_logs("CT: CT-00111: WARNING: The directory " + CT_DEBUG + " does not exist and can not be created.","Warnings");
  715. }
  716. }
  717. //debug and error files
  718. CT_DEBUG_FILE_fname = CT_TMP + "logs\\CTdebugfile.txt";
  719. CT_DEBUG_FILE = fso.OpenTextFile(CT_DEBUG_FILE_fname, ForWriting, "True");
  720. //debug
  721. var options = "";
  722. if ( DEBUG )
  723. {
  724. echo_debug("debug.function.checkSyntax");
  725. for (var ii = 0; ii < SCRIPT_OPTIONS.length; ii++)
  726. options += SCRIPT_OPTIONS(ii) + " ";
  727. echo_debug("debug.script options=" + options);
  728. echo_debug("MACHINE_NAME =" + MACHINE_NAME);
  729. echo_debug("OUTPUT_DIR =" + OUTPUT_DIR );
  730. echo_debug("SEARCH_DIR =" + SEARCH_DIR );
  731. echo_debug("OUTPUT_DEBUG =" + OUTPUT_DEBUG );
  732. echo_debug("LICAGREE =" + LICAGREE );
  733. echo_debug("PRODLIST =" + PRODLIST );
  734. echo_debug("MASK_DATA =" + MASK_DATA );
  735. echo_debug("\nCT_DEBUG_FILE_fname==" + CT_DEBUG_FILE_fname);
  736. }
  737. }
  738. /**
  739. * function to check if the current user is an administrator.
  740. */
  741. function credentialValidation()
  742. {
  743. var credentials = runCommand("net session >nul 2>&1",0);
  744. if ( credentials != 0 )
  745. {
  746. echo_logs("CT: CT-00100: WARNING: Current OS user does NOT have 'administrative' rights!\nIf you're sure that the Current OS user is granted the required privileges, continue with yes(y), otherwise select No(n) and please log on with a OS user with sufficient privileges.\nRunning the Collection Tool with insufficient privileges may have a significant impact on the quality of the data and information collected from this environment. Due to this, Oracle may have to get back to you and ask for additional items, or to execute again.","Warnings");
  747. if ( !LICAGREE ) {
  748. WScript.StdOut.Write("\n\n Please choose an Y to continue or N to quit:");
  749. var ANSWER = WScript.StdIn.ReadLine();
  750. var licAgreeLoop = true;
  751. while ( licAgreeLoop ) {
  752. switch ( ANSWER )
  753. {
  754. case "Y" :
  755. case "y" :
  756. licAgreeLoop = false;
  757. break;
  758. case "n" :
  759. case "N" :
  760. echo_logs("CT: CT-00101: WARNING: \nUser chose not to continue the Collection Tool.","Warnings");
  761. licAgreeLoop = false;
  762. WScript.Quit(1);
  763. break;
  764. default :
  765. WScript.StdOut.Write("Invalid option, please use y or n. (y|n)");
  766. ANSWER = WScript.StdIn.ReadLine();
  767. }
  768. }
  769. }
  770. }
  771. }
  772. /**
  773. * function to check if the user understands the debug risk.
  774. */
  775. function debugWarning()
  776. {
  777. echo_logs("CT: CT-00200: WARNING: You have chosen to run the Collection Tool in debug mode.\n The script will write data in files in order for Oracle to debug the running of the scripts. You are required to inspect the files for any data that may be sensitive before returning the output to Oracle. \nIf you wish to continue, continue with yes(y), otherwise select no(n) and contact your assigned consultant for more details.","Warnings");
  778. WScript.StdOut.Write("\n\n Please choose an Y to continue or N to quit:");
  779. var ANSWER = WScript.StdIn.ReadLine();
  780. var licAgreeLoop = true;
  781. while ( licAgreeLoop ) {
  782. switch ( ANSWER )
  783. {
  784. case "Y" :
  785. case "y" :
  786. licAgreeLoop = false;
  787. break;
  788. case "n" :
  789. case "N" :
  790. echo_logs("CT: CT-00101: WARNING: \nUser chose not to continue the Collection Tool.","Warnings");
  791. licAgreeLoop = false;
  792. WScript.Quit(1);
  793. break;
  794. default :
  795. WScript.StdOut.Write("Invalid option, please use y or n. (y|n)");
  796. ANSWER = WScript.StdIn.ReadLine();
  797. }
  798. }
  799. }
  800. /** ################################################################################
  801. #
  802. #***********************Helper and Debug Functions************************
  803. #
  804. ################################################################################
  805. */
  806. /**
  807. * get_pid - get the pid of the cscript running this.
  808. */
  809. function get_pid()
  810. {
  811. var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
  812. var pidItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'cscript.exe'", "WQL",
  813. wbemFlagReturnImmediately | wbemFlagForwardOnly);
  814. var pid;
  815. try {
  816. var enumItems = new Enumerator(pidItems);
  817. for (; !enumItems.atEnd(); enumItems.moveNext()) {
  818. var objItem = enumItems.item();
  819. if ( objItem.CommandLine.indexOf("Collection_main.js") > -1 )
  820. pid = objItem.ProcessID;
  821. }
  822. } catch(e) {
  823. pid = 0000;
  824. if( DEBUG )
  825. echo_debug("OBJItem error==" + e.description);
  826. }
  827. return pid;
  828. }
  829. /**
  830. * echo_debug - enhace debugging
  831. */
  832. function echo_debug(args)
  833. {
  834. WScript.Echo(args);
  835. try {
  836. CT_DEBUG_FILE.WriteLine(args);
  837. } catch(e) {
  838. }
  839. }
  840. /**
  841. * echo_logs - enhace debugging
  842. */
  843. function echo_logs(loggingText,loggingFile)
  844. {
  845. WScript.Echo(loggingText);
  846. try {
  847. if ( loggingFile.indexOf("Collected") != -1 ) {
  848. CT_COLLECTED_FILE.WriteLine(loggingText);
  849. } else if ( loggingFile.indexOf("Warnings") != -1 ) {
  850. CT_WARNINGS_FILE.WriteLine(loggingText);
  851. } else if( loggingFile.indexOf("Errors") != -1 ) {
  852. CT_ERRORS_FILE.WriteLine(loggingText);
  853. } else if( loggingFile.indexOf("WindowsCMD") != -1 ) {
  854. WINDOWSCMDERR.WriteLine(loggingText);
  855. }
  856. } catch(e) {
  857. }
  858. }
  859. /**
  860. * GetAllDriveList - function to get all of drives on the system.
  861. */
  862. function GetAllDriveList()
  863. {
  864. //Initialize variables
  865. var list = new Array();
  866. var dEnum, driveItem;
  867. dEnum = new Enumerator(fso.Drives);
  868. for (; !dEnum.atEnd(); dEnum.moveNext())
  869. {
  870. driveItem = dEnum.item();
  871. switch ( driveItem.DriveType )
  872. {
  873. case 0 :
  874. list.push(driveItem.Path+ "\\ , DriveType: Unknown");
  875. break;
  876. case 1 :
  877. list.push(driveItem.Path+ "\\ , DriveType: Removable Drive");
  878. break;
  879. case 2 :
  880. list.push(driveItem.Path+ "\\ , DriveType: Fixed Disk");
  881. break;
  882. case 3 :
  883. list.push(driveItem.Path+ "\\ , DriveType: Remote Disk");
  884. break;
  885. case 4 :
  886. list.push(driveItem.Path+ "\\ , DriveType: CDROM Drive");
  887. break;
  888. case 5 :
  889. list.push(driveItem.Path+ "\\ , DriveType: RAM Disk");
  890. break;
  891. default :
  892. list.push(driveItem.Path+ "\\ , DriveType: Not Found");
  893. }
  894. }
  895. return(list);
  896. }
  897. /**
  898. * GetDriveList - function to get all of the local/fixed drives on the system.
  899. */
  900. function GetDriveList()
  901. {
  902. //Initialize variables
  903. var list, dEnum, driveItem;
  904. dEnum = new Enumerator(fso.Drives);
  905. list = "";
  906. for (; !dEnum.atEnd(); dEnum.moveNext())
  907. {
  908. driveItem = dEnum.item();
  909. if (driveItem.DriveType == 2)
  910. list = list + driveItem.Path+ "\\," ;
  911. }
  912. return(list.slice(0,-1));
  913. }
  914. /**
  915. * ShowFolders - function to return a comma separated list of the folders in a directory.
  916. */
  917. function ShowFolders(folderName)
  918. {
  919. var fs, f, fc, s, dir;
  920. s = "";
  921. dir = "";
  922. f = fso.GetFolder(folderName);
  923. fc = new Enumerator(f.SubFolders);
  924. for (; !fc.atEnd();fc.moveNext())
  925. {
  926. s += fso.GetBaseName(fc.item());
  927. s += ",";
  928. }
  929. return(s);
  930. }
  931. /**
  932. * ShowFiles - function to return collection of the files in a directory.
  933. */
  934. function ShowFiles(folderName)
  935. {
  936. var fs, f, fc, s;
  937. s = "";
  938. f = fso.GetFolder(folderName);
  939. fc = new Enumerator(f.Files);
  940. return(fc);
  941. }
  942. /**
  943. * runCommand - Runs a specific command, uses WindowStyle and waits for the
  944. * command to return.
  945. *
  946. */
  947. function runCommand(theRunCommand,windowStyle) {
  948. var cmdLine = "cmd.exe /c " + theRunCommand;
  949. var errorCode;
  950. if ( theRunCommand.indexOf("dir /a") == -1 )
  951. WScript.Echo("\nRunning ... \n" + cmdLine);
  952. errorCode = WshShell.Run(cmdLine, windowStyle, true);
  953. return errorCode;
  954. }
  955. /**
  956. * removeCTHOMEDupes
  957. * pass in Oracle HOME arrary, truncate it to toplevel dir and remove dupes using the
  958. * funcitonality of hashmaps.
  959. *
  960. */
  961. function removeCTHOMEDupes(CTarr) {
  962. var ii;
  963. var retArr=[];
  964. var objArr={};
  965. for (var ii=0;ii<CTarr.length;ii++) {
  966. objArr[CTarr[ii].substring(0,CTarr[ii].indexOf("\\",3)).toLowerCase()]=0;
  967. }
  968. for (item in objArr) {
  969. retArr.push(item);
  970. }
  971. return retArr;
  972. }
  973. /**
  974. * execCommand - Executes a specific command, doesn't open a window, and waits for the
  975. * command to return. This function provides acccess to the output
  976. * stream of the command being run.
  977. */
  978. function execCommand(theExecCommand) {
  979. var execLine = theExecCommand;
  980. //WScript.Echo("cmdLine==" + cmdLine);
  981. WScript.Echo("Running ... " + execLine);
  982. var oExec = WshShell.Exec(execLine);
  983. var input = "";
  984. while (true)
  985. {
  986. if (!oExec.StdOut.AtEndOfStream)
  987. {
  988. WScript.Echo(oExec.StdOut.ReadLine());
  989. } else {
  990. break;
  991. }
  992. WScript.Sleep(100);
  993. }
  994. oExec.StdIn.Write("\n");
  995. while (oExec.Status != 1)
  996. WScript.Sleep(100);
  997. }
  998. /**
  999. * createDirectoryFromPath - Takes a path argument and will create the dir and subdirs
  1000. * of that path if necessary.
  1001. *
  1002. */
  1003. function createDirectoryFromPath(path) {
  1004. var tmpFileLoc = "";
  1005. var pattern = /(.*?)\\/gm;
  1006. while (result = pattern.exec(path)) {
  1007. tmpFileLoc = tmpFileLoc.concat(result[0]);
  1008. if ( !fso.FolderExists(tmpFileLoc) ) {
  1009. try {
  1010. fso.CreateFolder(tmpFileLoc);
  1011. } catch(e) {
  1012. if( DEBUG )
  1013. echo_debug("folder error==" + e.description);
  1014. throw "Error creating folder";
  1015. }
  1016. }
  1017. }
  1018. }
  1019. /**
  1020. * rmData - remove sensitive data from files
  1021. */
  1022. function rmData(fileProcessed, numProccessed) {
  1023. var fDest = CT_TMP + "FMW\\" + fileProcessed.replace(":","");
  1024. if ( DEBUG )
  1025. echo_debug("removing data from:" +fDest);
  1026. var rmDataText;
  1027. var regexArray;
  1028. var str,res,resultMatch;
  1029. var rmDataRegex;
  1030. var rmDataRegexGI;
  1031. try {
  1032. var fsRead = fso.OpenTextFile(fDest, ForReading, "True");
  1033. var fsWrite = fso.OpenTextFile(fDest+".tmp", ForWriting, "True");
  1034. var rmdataWin = fso.OpenTextFile(fso.getFolder("..").path + "\\resources\\util\\common\\bin\\rmdata_win.txt", ForReading, "True");
  1035. while (!rmdataWin.AtEndOfStream) {
  1036. rmDataText = rmdataWin.ReadAll();
  1037. }
  1038. regexArray = rmDataText.split('\n');
  1039. while (!fsRead.AtEndOfStream) {
  1040. str = fsRead.ReadLine();
  1041. res = str;
  1042. for (var jj=0; jj<regexArray.length; jj += 2 )
  1043. {
  1044. rmDataRegex = RegExp(regexArray[jj],"i");
  1045. str = res;
  1046. resultMatch = str.match(rmDataRegex);
  1047. if ( resultMatch != null ) {
  1048. rmDataRegexGI = RegExp(regexArray[jj],"gi");
  1049. res = str.replace(rmDataRegexGI, regexArray[jj+1]);
  1050. }
  1051. }
  1052. fsWrite.WriteLine(res);
  1053. }
  1054. fsRead.Close();
  1055. fsWrite.Close();
  1056. rmdataWin.Close();
  1057. fso.CopyFile(fDest+".tmp", fDest);
  1058. CT_ACTIONS_RESULTS_FILE.Writeline("Zip up " + fileProcessed + " and removed sensitive data.");
  1059. fso.DeleteFile(fDest+".tmp");
  1060. }
  1061. catch (exception)
  1062. {
  1063. fso.DeleteFile(fDest+".tmp");
  1064. fso.DeleteFile(fDest);
  1065. echo_logs("CT: CT-00027: ERROR: Unable to remove data from " + fDest + " Exception:" + exception.description,"Errors");
  1066. }
  1067. }
  1068. /** ################################################################################
  1069. #
  1070. #************************** File Detection Utilities ***************************
  1071. #
  1072. ################################################################################
  1073. */
  1074. /**
  1075. * regGetSubKeys
  1076. * getRegistry subkeys
  1077. */
  1078. function regGetSubKeys(strComputer, strRegPath)
  1079. {
  1080. var aNames = null;
  1081. var objLocator = new ActiveXObject("WbemScripting.SWbemLocator");
  1082. var objService = objLocator.ConnectServer(strComputer, "root\\default");
  1083. var objReg = objService.Get("StdRegProv");
  1084. var objMethod = objReg.Methods_.Item("EnumKey");
  1085. var objInParam = objMethod.InParameters.SpawnInstance_();
  1086. objInParam.hDefKey = "HKLM";
  1087. objInParam.sSubKeyName = strRegPath;
  1088. var objOutParam = objReg.ExecMethod_(objMethod.Name, objInParam);
  1089. switch(objOutParam.ReturnValue)
  1090. {
  1091. case 0: // Success
  1092. aNames = (objOutParam.sNames != null) ? objOutParam.sNames.toArray(): null;
  1093. break;
  1094. case 2: // Not Found
  1095. aNames = null;
  1096. break;
  1097. }
  1098. return { Results : 0, SubKeys : aNames };
  1099. }
  1100. /**
  1101. * getDefaultOracleEnv
  1102. * check running Java processes, known behomeslist and registry entries for
  1103. * WebLogic and Oracle default installations.
  1104. */
  1105. function getDefaultOracleEnv () {
  1106. // check running processes for java command line get info from printMachineInfo run
  1107. // look for weblogic.jar in classpath
  1108. // look for weblogic.home= in java options
  1109. // look for wls.home= in java options
  1110. // look for oracle.home= in java options
  1111. // look for domain.home= in java options
  1112. // check HKLM\\SOFTWARE\\Oracle
  1113. var CT_MACHINFO_FILE_read = fso.OpenTextFile(CT_MACHINFO_FILE_fname, ForReading, "True");
  1114. var machineInfo;
  1115. var linemachineInfo;
  1116. var envParser;
  1117. var wlservIndex;
  1118. var rDomainRegisty;
  1119. var longName;
  1120. var checkBEAHOMESReg = false;
  1121. // check c:\bea and d:\bea for beahomelist
  1122. var beahomelist;
  1123. if ( fso.FileExists("c:\\bea\\beahomelist") ) {
  1124. beahomelist = "c:\\bea\\beahomelist";
  1125. } else if ( fso.FileExists("d:\\bea\\beahomelist") ) {
  1126. beahomelist = "d:\\bea\\beahomelist";
  1127. } else {
  1128. checkBEAHOMESReg = true;
  1129. }
  1130. var beahomeArray;
  1131. if ( checkBEAHOMESReg == true ) {
  1132. beahomelist = WshShell.RegRead("HKLM\\SOFTWARE\\Oracle\\BEAHOMELIST");
  1133. beahomeArray = beahomelist.split(";");
  1134. } else {
  1135. var fbeahomes = fso.OpenTextFile(String(beahomelist), ForReading, "True");
  1136. while (!fbeahomes.AtEndOfStream){
  1137. var linebeahomes = "";
  1138. linebeahomes += fbeahomes.ReadLine(); // Read Data
  1139. beahomeArray = linebeahomes.split(";"); // Parse data into String array
  1140. }
  1141. fbeahomes.Close();
  1142. }
  1143. for (var ii=0; ii<beahomeArray.length; ii++)
  1144. {
  1145. if ( CT_HOMES.toLowerCase().indexOf(beahomeArray[ii]) == -1 )
  1146. CT_HOMES += beahomeArray[ii] + ",";
  1147. }
  1148. if ( DEBUG )
  1149. echo_debug("FASTSEARCH directories after BEAHOME: " + CT_HOMES + "\n");
  1150. while (!CT_MACHINFO_FILE_read.AtEndOfStream){
  1151. linemachineInfo = CT_MACHINFO_FILE_read.ReadLine(); // Read Data
  1152. if ( linemachineInfo.indexOf("CommandLine") != -1 )
  1153. {
  1154. machineInfo = linemachineInfo.split(/[ ;\"]+/); // Parse data into String array
  1155. for (var ii=0; ii<machineInfo.length; ii++)
  1156. {
  1157. if ( machineInfo[ii].indexOf("weblogic.jar") != -1 ) {
  1158. wlservIndex = machineInfo[ii].toLowerCase().indexOf("wlserv");
  1159. longName = fso.GetAbsolutePathName(machineInfo[ii].substring(0,wlservIndex));
  1160. //if ( ! CT_HOMES.toLowerCase().indexOf(longName) != -1 )
  1161. CT_HOMES += longName +",";
  1162. } else if ( machineInfo[ii].toLowerCase().indexOf(".home=") != -1 || machineInfo[ii].toLowerCase().indexOf("_HOME=") != -1 ) {
  1163. envParser = machineInfo[ii].split("=");
  1164. wlservIndex = envParser[1].toLowerCase().indexOf("wlserv");
  1165. longName = fso.GetAbsolutePathName(envParser[1].substring(0,wlservIndex));
  1166. //if ( ! CT_HOMES.toLowerCase().indexOf(longName) )
  1167. CT_HOMES += longName+",";
  1168. }
  1169. }
  1170. }
  1171. }
  1172. CT_MACHINFO_FILE_read.Close();
  1173. if ( DEBUG )
  1174. echo_debug("FASTSEARCH directories after -info.txt: " + CT_HOMES + "\n");
  1175. // use WMI Objects to get env.
  1176. var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
  1177. //set up look for key environment variables.
  1178. var envStatement = "SELECT * FROM Win32_Environment WHERE Name = 'BEA_HOME' OR Name = 'WL_HOME' OR Name = 'MW_HOME' OR Name = 'WEBLOGIC_HOME' OR Name = 'ORACLE_HOME' or Name = 'ORACLE_SID'";
  1179. // Execute and enumerate WMI statement for Windows processes.
  1180. var colItems = objWMIService.ExecQuery(envStatement, "WQL",
  1181. wbemFlagReturnImmediately | wbemFlagForwardOnly);
  1182. var enumItems = new Enumerator(colItems);
  1183. for (; !enumItems.atEnd(); enumItems.moveNext()) {
  1184. var objItem = enumItems.item();
  1185. longName = fso.getFileName(objItem.VariableValue);
  1186. if ( CT_HOMES.toLowerCase().indexOf(longName) == -1 )
  1187. CT_HOMES += longName +",";
  1188. }
  1189. if ( DEBUG )
  1190. echo_debug("FASTSEARCH directories after WMIENV: " + CT_HOMES + "\n");
  1191. CT_HOME_arr = CT_HOMES.split(",");
  1192. var domainReadline;
  1193. var locationXML;
  1194. var startLocation;
  1195. var endLocation;
  1196. var baseIndex = 0;
  1197. var indexCount;
  1198. for (var ii=0; ii<CT_HOME_arr.length-1; ii++)
  1199. {
  1200. if ( fso.FileExists(CT_HOME_arr[ii] + "\\domain-registry.xml") )
  1201. {
  1202. rDomainRegisty = fso.OpenTextFile(CT_HOME_arr[ii] + "\\domain-registry.xml", ForReading, "True");
  1203. while (!rDomainRegisty.AtEndOfStream){
  1204. domainReadline = rDomainRegisty.ReadLine();
  1205. if ( domainReadline.toLowerCase().indexOf("location") != -1 )
  1206. {
  1207. startLocation = domainReadline.indexOf("\"") +1;
  1208. endLocation = domainReadline.lastIndexOf("\"");
  1209. locationXML = domainReadline.substring(startLocation,endLocation);
  1210. // use last index of 3 times to get base directory
  1211. // 3 times removes domain name, domains, and user_project dir.
  1212. indexCount = 0;
  1213. while (indexCount < 3 && baseIndex !== -1) {
  1214. baseIndex = locationXML.lastIndexOf("\\");
  1215. locationXML = locationXML.substring(0,baseIndex);
  1216. indexCount++;
  1217. }
  1218. if ( CT_HOMES.toLowerCase().indexOf(locationXML) == -1 )
  1219. CT_HOMES += locationXML + ",";
  1220. }
  1221. }
  1222. rDomainRegisty.Close();
  1223. }
  1224. }
  1225. if ( DEBUG )
  1226. echo_debug("FASTSEARCH directories after domain-registry: " + CT_HOMES + "\n");
  1227. //check reg for ORACLE_HOME
  1228. var OracleEntry;
  1229. var rtn = regGetSubKeys(".", "SOFTWARE\\Oracle");
  1230. if ( rtn.Results == 0 )
  1231. {
  1232. for (var idx=0;idx<rtn.SubKeys.length;idx++)
  1233. {
  1234. WScript.Echo(rtn.SubKeys[idx]);
  1235. try {
  1236. OracleEntry = WshShell.RegRead("HKLM\\SOFTWARE\\Oracle\\" + rtn.SubKeys[idx] + "\\ORACLE_HOME");
  1237. CT_HOMES += OracleEntry + ",";
  1238. } catch (e) {
  1239. OracleEntry = "ORACLE_HOME not found";
  1240. }
  1241. }
  1242. }
  1243. // trim the last comma
  1244. CT_HOMES = CT_HOMES.slice(0,-1);
  1245. CT_HOME_arr = CT_HOMES.split(",");
  1246. CT_HOMES = "";
  1247. var CT_HOME_arr_sort;
  1248. CT_HOME_arr_sort = removeCTHOMEDupes(CT_HOME_arr);
  1249. for (var ii=0; ii<CT_HOME_arr_sort.length; ii++)
  1250. {
  1251. CT_HOMES += CT_HOME_arr_sort[ii] +",";
  1252. CT_HOMES_FILE.Writeline(CT_HOME_arr_sort[ii] + "\n");
  1253. }
  1254. // trim the last comma
  1255. CT_HOMES = CT_HOMES.slice(0,-1);
  1256. }
  1257. /**
  1258. * getProducts
  1259. * Prompt user for products to be searched if the -p option was not passed
  1260. * in on the command line.
  1261. */
  1262. function getProducts() {
  1263. // Get a list of Product Family directories under the resource directory
  1264. var PRODFAMILYLIST = ShowFolders( "..\\resources\\products" );
  1265. var folder = "";
  1266. var prodFamilies = new Array();
  1267. var showMenu = "all,DB,EBS,FormsReports,FMW,CPUQ,OAS,SOA,WLS,OBI,Webcenter";
  1268. PRODFAMILYLIST = PRODFAMILYLIST.replace("Tuxedo,", "");
  1269. PRODFAMILYLIST = PRODFAMILYLIST.replace("FMWRUL,", "");
  1270. if ( PRODLIST == "all")
  1271. {
  1272. PRODUCTSRUN = "_all";
  1273. PRODLIST = PRODFAMILYLIST;
  1274. } else if ( ! PRODLIST == "" ) {
  1275. var TMPPLIST = PRODLIST;
  1276. PRODLIST = "";
  1277. var TMPPLIST_ARRAY = TMPPLIST.split(',');
  1278. for (var ii=0; ii<TMPPLIST_ARRAY.length; ii++)
  1279. {
  1280. folder = "..\\resources\\products\\" + TMPPLIST_ARRAY[ii];
  1281. if ( !fso.FolderExists(folder) )
  1282. {
  1283. echo_logs("CT: CT-00010: ERROR: " + TMPPLIST_ARRAY[ii] + " is not a valid product family.","Errors");
  1284. continue;
  1285. }
  1286. PRODLIST += TMPPLIST_ARRAY[ii];
  1287. PRODLIST += ",";
  1288. PRODUCTSRUN += "_";
  1289. PRODUCTSRUN += TMPPLIST_ARRAY[ii];
  1290. }
  1291. } else {
  1292. WScript.Echo("Product Families to look for:\n");
  1293. var tmpPRODFAMILYLIST = PRODFAMILYLIST + "all,";
  1294. prodFamilies = tmpPRODFAMILYLIST.split(',');
  1295. for (var ii=0; ii<prodFamilies.length; ii++)
  1296. {
  1297. if ( showMenu.indexOf(prodFamilies[ii]) >= 0 )
  1298. {
  1299. WScript.Echo( prodFamilies[ii] );
  1300. }
  1301. }
  1302. PRODLIST = "";
  1303. var ANSWER = "";
  1304. while ( ANSWER == "" )
  1305. {
  1306. // Prompt for user value
  1307. WScript.Echo("\nWhich Product Family would you like to search for?");
  1308. ANSWER = WScript.StdIn.ReadLine();
  1309. if ( ANSWER == "All" )
  1310. {
  1311. ANSWER = "all";
  1312. }
  1313. //Make sure value is valid
  1314. if ( ANSWER != "all" && ANSWER.indexOf(",") != -1 ) {
  1315. var PROD_ARRAY = ANSWER.split(',');
  1316. for (var jj=0; jj<PROD_ARRAY.length; jj++)
  1317. {
  1318. folder = "..\\resources\\products\\" + PROD_ARRAY[jj];
  1319. if ( !fso.FolderExists(folder) )
  1320. {
  1321. echo_logs("CT: CT-00010: ERROR: " + PROD_ARRAY[jj] + " is not a valid product family.","Errors");
  1322. WScript.Echo("Please choose from the menu above\n");
  1323. ANSWER = "";
  1324. } else {
  1325. PRODUCTSRUN += "_";
  1326. PRODUCTSRUN += PROD_ARRAY[jj];
  1327. }
  1328. }
  1329. }
  1330. // Check and eliminate duplicates.
  1331. if ( PRODLIST.indexOf(ANSWER) == -1 )
  1332. {
  1333. PRODLIST += ANSWER;
  1334. PRODLIST += ",";
  1335. if ( DEBUG )
  1336. echo_debug("\PRODLIST==" + PRODLIST +"\n");
  1337. }
  1338. if ( ANSWER == "all" )
  1339. {
  1340. PRODUCTSRUN = "_all";
  1341. PRODLIST = PRODFAMILYLIST;
  1342. } else {
  1343. // ask for another product Prompt
  1344. WScript.Echo("Product Families chosen so far: " + PRODLIST +"\n");
  1345. WScript.Echo("Would you like to add another Product? [y/n]:");
  1346. ANSWER = WScript.StdIn.ReadLine();
  1347. var switchBoolean = true;
  1348. while ( switchBoolean ) {
  1349. // Act on response
  1350. switch ( ANSWER )
  1351. {
  1352. case "y" :
  1353. case "Y" :
  1354. // They want to add a product, set answer to blank and reprompt.
  1355. ANSWER = "";
  1356. switchBoolean = false;
  1357. break;
  1358. case "n" :
  1359. case "N" :
  1360. // quit prompt.
  1361. switchBoolean = false;
  1362. break;
  1363. default :
  1364. // invalid answer reprompt
  1365. WScript.Echo("Please use y/n, would you like to add another Product? [y/n]:");
  1366. ANSWER = WScript.StdIn.ReadLine();
  1367. }
  1368. }
  1369. }
  1370. }
  1371. }
  1372. }
  1373. /**
  1374. * parseProductFiles - parse SEARCHFILES tag and set search
  1375. * files and the action used to identify Oracle product for installations
  1376. *
  1377. * parse ORACLEPROCESS tag and create a list of process names used to identify Oracle products
  1378. *
  1379. */
  1380. function parseProductFiles() {
  1381. // PRODLIST gets set in getProducts()
  1382. // Loop through each directory in PRODLIST and generate a
  1383. // list(PRODUCTLIST) of individual Products and specific versions
  1384. var INCLUDETAGS = "";
  1385. var PRODFAMILY = PRODLIST.split(',');
  1386. var prodfolder = new Enumerator();
  1387. var shortFname = "";
  1388. var fname = "";
  1389. var fRead;
  1390. var data = "";
  1391. var key, value, action, valueMatch;
  1392. var prodCmdArray;
  1393. var slash;
  1394. var valueProd;
  1395. var valueProdComma;
  1396. for (var ii=0; ii<PRODFAMILY.length; ii++)
  1397. {
  1398. // get all files in the specified product folder
  1399. prodfolder = ShowFiles("..\\resources\\products\\" + PRODFAMILY[ii]);
  1400. // loop through each of the files in the folder
  1401. for (; !prodfolder.atEnd(); prodfolder.moveNext())
  1402. {
  1403. fname = prodfolder.item();
  1404. shortFname = fso.GetBaseName(fname);
  1405. // if the product is not part of the ALLPRODUCTS list, then add it.
  1406. if ( ALLPRODLIST.indexOf(shortFname) == -1 )
  1407. {
  1408. ALLPRODLIST += shortFname;
  1409. ALLPRODLIST += ",";
  1410. if ( DEBUG )
  1411. echo_debug("adding " + shortFname + " to ALLPRODLIST==" + ALLPRODLIST);
  1412. }
  1413. fRead = fso.OpenTextFile(String(fname), ForReading, "True");
  1414. //search the product file for each of the CT tags.
  1415. while (!fRead.AtEndOfStream){
  1416. data = "";
  1417. data += fRead.ReadLine(); // Read Data
  1418. prodCmdArray = data.split(/[=\|]/); // Parse data into String array
  1419. key = prodCmdArray[0];
  1420. value = prodCmdArray[1];
  1421. action = prodCmdArray[2];
  1422. valueMatch = "," + value + ",";
  1423. if ( DEBUG ) {
  1424. echo_debug("Readline==" + data);
  1425. echo_debug("key==" + key);
  1426. echo_debug("value==" + value);
  1427. echo_debug("action==" + action);
  1428. }
  1429. switch(key)
  1430. {
  1431. case "INCLUDEPRODUCT": // Match INCLUDEPRODUCT
  1432. slash = value.indexOf("/");
  1433. valueProd = value.substring(0,slash);
  1434. valueProdComma = valueProd + ",";
  1435. if ( PRODLIST.indexOf(valueProd) == -1 || PRODLIST.indexOf(valueProdComma) == -1 )
  1436. {
  1437. PRODFAMILY[PRODFAMILY.length] = valueProd;
  1438. if ( DEBUG )
  1439. echo_debug("\nadding "+ valueProd + "to PRODLIST==" + PRODLIST +"\n");
  1440. }
  1441. break;
  1442. case "ORACLEPRODUCT": // Match ORACLEPRODUCT
  1443. if ( PRODUCTLIST.indexOf(value) == -1 )
  1444. {
  1445. PRODUCTLIST += value;
  1446. PRODUCTLIST += ",";
  1447. if ( DEBUG )
  1448. echo_debug("\nadding " + value + " to PRODUCTLIST==" + PRODUCTLIST +"\n");
  1449. }
  1450. break;
  1451. case "SEARCHFILE": // Match SEARCHFILE
  1452. if ( value.substring(0,1) == "\*" )
  1453. {
  1454. value = "\\" +value;
  1455. valueMatch = "," + value + ",";
  1456. }
  1457. if ( value.indexOf("server.xml") != -1 )
  1458. {
  1459. value = "server.xml";
  1460. }
  1461. if ( ALLSEARCHFILES.indexOf(valueMatch) == -1 )
  1462. {
  1463. ALLSEARCHFILES += value;
  1464. ALLSEARCHFILES += ",";
  1465. if ( DEBUG )
  1466. echo_debug("\nadding " + value + " to ALLSEARCHFILES==" +ALLSEARCHFILES+"\n");
  1467. switch (action)
  1468. {
  1469. case "BUNDLE":
  1470. if ( BUNDLEFILES.indexOf(valueMatch) == -1 )
  1471. {
  1472. BUNDLEFILES += value;
  1473. BUNDLEFILES += ",";
  1474. if ( DEBUG )
  1475. echo_debug("\nadding " + value + " to BUNDLEFILES==" + BUNDLEFILES +"\n");
  1476. }
  1477. break;
  1478. case "TIMESTAMP":
  1479. if ( TSFILES.indexOf(valueMatch) == -1 )
  1480. {
  1481. TSFILES += value;
  1482. TSFILES += ",";
  1483. if ( DEBUG )
  1484. echo_debug("\nadding " + value + " to TSFILES==" + TSFILES +"\n");
  1485. }
  1486. break;
  1487. case "TAIL":
  1488. if ( TAILFILES.indexOf(valueMatch) == -1 )
  1489. {
  1490. TAILFILES += value;
  1491. TAILFILES += ",";
  1492. if ( DEBUG )
  1493. echo_debug("\nadding " + value + " to TAILFILES==" + TAILFILES +"\n");
  1494. }
  1495. break;
  1496. case "LISTING":
  1497. if ( LISTINGFILES.indexOf(valueMatch) == -1 )
  1498. {
  1499. LISTINGFILES += value;
  1500. LISTINGFILES += ",";
  1501. if ( DEBUG )
  1502. echo_debug("\nadding " + value + " to LISTINGFILES==" + LISTINGFILES +"\n");
  1503. }
  1504. break;
  1505. case "COPY":
  1506. if ( COPYFILES.indexOf(valueMatch) == -1 )
  1507. {
  1508. COPYFILES += value;
  1509. COPYFILES += ",";
  1510. if ( DEBUG )
  1511. echo_debug("\nadding " + value + " to COPYFILES==" + COPYFILES +"\n");
  1512. }
  1513. break;
  1514. case "LOG":
  1515. if ( LOGFILES.indexOf(valueMatch) == -1 )
  1516. {
  1517. LOGFILES += value;
  1518. LOGFILES += ",";
  1519. if ( DEBUG )
  1520. echo_debug("\nadding " + value + " to LOGFILES==" + LOGFILES +"\n");
  1521. }
  1522. break;
  1523. case "COLLECTRMDATA":
  1524. if ( COLLECTRMDATAFILES.indexOf(valueMatch) == -1 )
  1525. {
  1526. COLLECTRMDATAFILES += value;
  1527. COLLECTRMDATAFILES += ",";
  1528. if ( DEBUG )
  1529. echo_debug("\nadding " + value + " to COLLECTRMDATAFILES==" + COLLECTRMDATAFILES +"\n");
  1530. }
  1531. break;
  1532. }
  1533. }
  1534. break;
  1535. case "ORACLEPROCESS": // Match ORACLEPROCESS
  1536. if ( PROCESSLIST.indexOf(valueMatch) == -1 )
  1537. {
  1538. PROCESSLIST += value;
  1539. PROCESSLIST += ",";
  1540. if ( DEBUG )
  1541. echo_debug("\nadding " + value + " to PROCESSLIST==" + PROCESSLIST +"\n");
  1542. }
  1543. break;
  1544. case "CMDOUTFILE": // Match CMDOUTFILE
  1545. if ( value.substring(0,1) == "\*" )
  1546. {
  1547. value = "\\" +value;
  1548. } else if ( value.substring(0,2) == ".." )
  1549. {
  1550. value = value.substring(2);
  1551. value = fso.getFolder("..").path + value.replace(/\//g,"\\");
  1552. } else if ( value.substring(0,1) == "." )
  1553. {
  1554. value = value.substring(1);
  1555. value = CT_HOME + value.replace(/\//g,"\\");
  1556. }
  1557. if ( value.indexOf("TMPDIR") != -1 ){
  1558. value = value.replace("\${TMPDIR}/",TMPDIR +"\\");
  1559. }
  1560. if ( CMDOUTFILELIST.indexOf(value) == -1 )
  1561. {
  1562. CMDOUTFILELIST += value + ",";
  1563. if ( DEBUG )
  1564. echo_debug("\nadding " + value + " to CMDOUTFILELIST==" + CMDOUTFILELIST +"\n");
  1565. }
  1566. switch (action)
  1567. {
  1568. case "BUNDLE":
  1569. if ( BUNDLEFILES.indexOf(value) == -1 )
  1570. {
  1571. BUNDLEFILES += value;
  1572. BUNDLEFILES += ",";
  1573. if ( DEBUG )
  1574. echo_debug("\nadding " + value + " to BUNDLEFILES==" + BUNDLEFILES +"\n");
  1575. }
  1576. break;
  1577. case "TIMESTAMP":
  1578. if ( TSFILES.indexOf(value) == -1 )
  1579. {
  1580. TSFILES += value;
  1581. TSFILES += ",";
  1582. if ( DEBUG )
  1583. echo_debug("\nadding " + value + " to TSFILES==" + TSFILES +"\n");
  1584. }
  1585. break;
  1586. }
  1587. break;
  1588. case "RUNCMD": // Match RUNCMD
  1589. // make RUNLIST value Windows compliant
  1590. if ( value.substring(0,2) == ".." )
  1591. {
  1592. value = value.substring(2);
  1593. value = fso.getFolder("..").path + value.replace(/\//g,"\\");
  1594. }
  1595. if ( RUNLIST.indexOf(value + "|" + action) == -1 )
  1596. {
  1597. // Run CPUQ before machine info section
  1598. if ( value.indexOf("cpuq_main") != -1 ) {
  1599. RUNCPUQ += value + "|" + action;
  1600. RUNCPUQ += ",";
  1601. }
  1602. RUNLIST += value + "|" + action;
  1603. RUNLIST += ",";
  1604. if ( DEBUG )
  1605. echo_debug("\nadding " + value + " to RUNLIST==" + RUNLIST +"\n");
  1606. } else
  1607. if ( DEBUG )
  1608. echo_debug("\nDidn't add " + value + "|" + action + " to RUNLIST==" + RUNLIST +"\n");
  1609. break;
  1610. default:
  1611. if ( DEBUG )
  1612. echo_debug("no match for data==" + data +"\n");
  1613. }
  1614. }
  1615. }
  1616. }
  1617. CT_ACTIONS_RESULTS_FILE.Writeline("Product Name discovery list: " + PRODUCTLIST+ "\n");
  1618. CT_ACTIONS_RESULTS_FILE.Writeline("All Product files used: " + ALLPRODLIST+ "\n");
  1619. CT_ACTIONS_RESULTS_FILE.Writeline("Files to be bundled: " + BUNDLEFILES+ "\n");
  1620. CT_ACTIONS_RESULTS_FILE.Writeline("Files to be collected and sensitive data removed: " + COLLECTRMDATAFILES+ "\n");
  1621. CT_ACTIONS_RESULTS_FILE.Writeline("Search files: " + ALLSEARCHFILES+ "\n");
  1622. CT_ACTIONS_RESULTS_FILE.Writeline("Oracle processes: " + PROCESSLIST+ "\n");
  1623. CT_ACTIONS_RESULTS_FILE.Writeline("Commands to be run: " + RUNLIST+ "\n");
  1624. CT_ACTIONS_RESULTS_FILE.Writeline("Command Output Files: " + CMDOUTFILELIST+ "\n");
  1625. CT_ACTIONS_RESULTS_FILE.Writeline("CT_HOME: " + CT_HOME+ "\n");
  1626. CT_ACTIONS_RESULTS_FILE.Writeline("CT_TMP: " + CT_TMP+ "\n");
  1627. }
  1628. /**
  1629. * doSearch() - search Windows hard drives and directories
  1630. * for files releated to Oracle products.
  1631. */
  1632. function doSearch() {
  1633. var driveList = SEARCH_DIR.split(",");
  1634. var searchArray = ALLSEARCHFILES.split(",");
  1635. var searchFiles = "";
  1636. var drive = "";
  1637. var thisDir = CT_HOME;
  1638. // Setup search dirs if fastsearh
  1639. if ( FASTSEARCH )
  1640. {
  1641. driveList = CT_HOMES.split(",");
  1642. CT_ACTIONS_RESULTS_FILE.Writeline("FASTSEARCH directories: " + CT_HOMES + "\n");
  1643. }
  1644. for (var ii=0; ii<searchArray.length - 1; ii++)
  1645. {
  1646. if ( searchArray[ii].substring(0,1) == "\\" )
  1647. {
  1648. searchFiles += searchArray[ii].substring(1) +" ";
  1649. } else {
  1650. searchFiles += searchArray[ii] +" ";
  1651. }
  1652. }
  1653. searchFiles = searchFiles.substring(0,searchFiles.length - 1);
  1654. // check for duplicate processes, in case a previous run was unexpectedly cancelled.
  1655. // use WMI Objects to get running processes.
  1656. var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
  1657. var colItems = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'cmd.exe'", "WQL",
  1658. wbemFlagReturnImmediately | wbemFlagForwardOnly);
  1659. try {
  1660. var enumItems = new Enumerator(colItems);
  1661. for (; !enumItems.atEnd(); enumItems.moveNext()) {
  1662. var objItem = enumItems.item();
  1663. if ( objItem.CommandLine.indexOf("CTfiles.txt") > -1 )
  1664. objItem.Terminate();
  1665. }
  1666. } catch(e) {
  1667. if( DEBUG )
  1668. echo_debug("OBJItem error==" + e.description);
  1669. }
  1670. // Iterate the Drives
  1671. for (var ii=0; ii<driveList.length; ii++)
  1672. {
  1673. drive = driveList[ii];
  1674. var drivecount = ii + 1;
  1675. var lastChar = drive.charAt(drive.length - 1);
  1676. if ( lastChar != ("\\") )
  1677. {
  1678. drive = drive +"\\";
  1679. }
  1680. WScript.Echo("\nSearching location [" + drivecount + " of " + driveList.length + "]," + drive + " for Oracle product and configuration files...\n");
  1681. var runReturn;
  1682. runReturn = runCommand("\"cd /d \"" + drive + "\" && dir /a:-d /b /s " + searchFiles + ">> \"" + CT_FILES_fname +"\" && cd /d \""+thisDir +"\"\"",0);
  1683. SEARCH_COMMAND += "\"cd /d \"" + drive + "\" && dir /a:-d /b /s " + searchFiles + ">> \"" + CT_FILES_fname +"\" && cd /d \""+thisDir +"\"\"";
  1684. if ( runReturn != 0 ) {
  1685. echo_logs("Search of " + drive + " returned with error code: " + runReturn ,"WindowsCMD");
  1686. }
  1687. }
  1688. }
  1689. /**
  1690. * doRunCmd() - Parse CMDLIST and run any OS commands or scripts.
  1691. */
  1692. function doRunCmd( cmdsToRun ) {
  1693. // split the commands lists into an array
  1694. var cmdList = cmdsToRun.split(",");
  1695. var runReturn;
  1696. if ( DEBUG )
  1697. WScript.Echo("cmdsToRun=="+cmdsToRun);
  1698. // loop through each command
  1699. for (var ii=0; ii<cmdList.length - 1; ii++)
  1700. {
  1701. // split the comannd into the command and the type
  1702. var cmdAndType = cmdList[ii].split(/[\|]/);
  1703. //Bundle files written in Unix syntax, so replace / with "\\"
  1704. var cmd = cmdAndType[0].replace(/\//g,"\\");
  1705. var cmdType = cmdAndType[1];
  1706. // check command type, add appropriate extenstion
  1707. if ( cmdType == "SCRIPT" )
  1708. cmd += ".cmd";
  1709. else
  1710. cmd += ".exe";
  1711. if ( DEBUG )
  1712. WScript.Echo("Run cmd1 ==" + cmd);
  1713. //make sure the script exists
  1714. if ( ! fso.FileExists(cmd) )
  1715. WScript.Echo("\nCommand " + cmd + " not found.");
  1716. else if ( cmd.indexOf("cpuq_main.cmd") != -1 ) {
  1717. if ( RANCPUQ == "false" ) {
  1718. //wrap cmd in quotes for directories with spaces
  1719. cmd = "\"" + cmd + "\"";
  1720. // To avoid running the license again on CPUQ, give it a 2nd cmd line arg. and delete previous temp file
  1721. try {
  1722. fso.DeleteFile(CT_TMP + "CPUQ\\"+"\\ct_cpuq_tmp.txt");
  1723. fso.DeleteFile(CT_TMP + "CPUQ\\"+MACHINE_NAME+"-ct_cpuq.txt");
  1724. } catch (exception) {
  1725. if ( DEBUG )
  1726. echo_debug("No CPUQ file to delete\n");
  1727. }
  1728. if ( DEBUG )
  1729. WScript.Echo("Run cmd2 ==" + cmd);
  1730. runReturn = runCommand(cmd,1);
  1731. if ( runReturn != 0 ) {
  1732. echo_logs("Command " + cmd + "returned with error code: " + runReturn ,"WindowsCMD");
  1733. }
  1734. }
  1735. } else {
  1736. //wrap cmd in quotes for directories with spaces
  1737. cmd = "\"" + cmd + "\"";
  1738. if ( DEBUG )
  1739. WScript.Echo("Run cmd2 ==" + cmd);
  1740. runReturn = runCommand(cmd,1);
  1741. if ( runReturn != 0 ) {
  1742. echo_logs("Command " + cmd + "returned with error code: " + runReturn ,"WindowsCMD");
  1743. }
  1744. }
  1745. }
  1746. }
  1747. /**
  1748. *
  1749. * function to add any command or script generated output files to the
  1750. * list of files we need information for
  1751. *
  1752. */
  1753. function addOutputFiles() {
  1754. var CT_FILES = fso.OpenTextFile(CT_FILES_fname, ForAppending, "True");
  1755. var cmdOutBase, cmdOutFile, tmpFile, tmpFolder;
  1756. if ( DEBUG )
  1757. echo_debug("debug.function.addOutputFiles");
  1758. cmdOutArray = CMDOUTFILELIST.split(',');
  1759. // Go through CMDOUTFILELIST, add to CT_FILES as necessary.
  1760. for (var ii=0; ii<cmdOutArray.length-1; ii++)
  1761. {
  1762. // FSO file names can't contain wildcards.
  1763. // check for wildcards and replace with the actual file name if there.
  1764. if ( cmdOutArray[ii].indexOf("\*") != -1 )
  1765. {
  1766. cmdOutBase = cmdOutArray[ii].substring(0, cmdOutArray[ii].lastIndexOf("\\") );
  1767. //find out where the wildcard is, then grab the correct cmd out pattern
  1768. if ( cmdOutArray[ii].lastIndexOf("*")+1 == cmdOutArray[ii].length )
  1769. {
  1770. cmdOutFile = cmdOutArray[ii].substring(cmdOutArray[ii].lastIndexOf("\\")+1,cmdOutArray[ii].lastIndexOf("*") );
  1771. } else {
  1772. cmdOutFile = cmdOutArray[ii].substring(cmdOutArray[ii].lastIndexOf("*")+1 );
  1773. }
  1774. if ( DEBUG )
  1775. echo_debug("cmdOutFile==" + cmdOutFile);
  1776. if ( fso.FolderExists(cmdOutBase) )
  1777. {
  1778. if ( DEBUG )
  1779. echo_debug("cmdOutFile . index==" + cmdOutFile.lastIndexOf("."));
  1780. if ( cmdOutFile.lastIndexOf(".") >= 0 )
  1781. {
  1782. var cmdOutFileColl = ShowFiles(cmdOutBase);
  1783. // Traverse through the FileCollection using the FOR loop
  1784. for(; !cmdOutFileColl.atEnd(); cmdOutFileColl.moveNext()) {
  1785. tmpFile = String(cmdOutFileColl.item());
  1786. if ( tmpFile.indexOf(cmdOutFile) != -1 ) {
  1787. CT_FILES.WriteLine(tmpFile);
  1788. bundleResults(tmpFile, 0);
  1789. }
  1790. }
  1791. } else {
  1792. var cmdOutFolderColl = ShowFolders(cmdOutBase).split(',');
  1793. if ( DEBUG )
  1794. echo_debug("cmdOutFolderColl==" + cmdOutFolderColl);
  1795. for (var jj=0; jj<cmdOutFolderColl.length-1; jj++)
  1796. {
  1797. tmpFolder = cmdOutBase + "\\" + cmdOutFolderColl[jj];
  1798. if ( DEBUG )
  1799. echo_debug("tmpFolder==" + tmpFolder);
  1800. if ( tmpFolder.indexOf(cmdOutFile) != -1 ) {
  1801. CT_FILES.WriteLine(tmpFolder);
  1802. bundleResults(tmpFolder, 0);
  1803. }
  1804. }
  1805. }
  1806. }
  1807. } else {
  1808. CT_FILES.WriteLine(cmdOutArray[ii]);
  1809. bundleResults(cmdOutArray[ii], 0);
  1810. }
  1811. }
  1812. CT_FILES.Close();
  1813. }
  1814. /**
  1815. * fileGetCTFiles() - remove Non-Oracle files from collection
  1816. *
  1817. */
  1818. function fileGetCTFiles()
  1819. {
  1820. var CT_ONLY_FILES = CT_TMP + "logs\\Collection_ONLY.txt";
  1821. var runReturn;
  1822. // first delete files in samples or other Windows directories where CT
  1823. // files are either not commonly found or not need for licenseable determination.
  1824. runReturn = runCommand("findstr /v /i /g:\"" + fso.getFolder("..").path + "\\resources\\util\\file_sort_list_win.txt\" \"" + CT_FILES_fname + "\">\"" + CT_SORTED_FILES_fname + "\"",0);
  1825. if ( runReturn != 0 ) {
  1826. WINDOWSCMDERR.WriteLine("Command findstr /v /i /g:\"" + fso.getFolder("..").path + "\\resources\\util\\file_sort_list_win.txt\" " + CT_FILES_fname + "\">\"" + CT_SORTED_FILES_fname +"\" returned with error code: " + runReturn );
  1827. }
  1828. if ( DEBUG ) {
  1829. //WScript.Echo("CT_ONLY_FILES path==" + CT_ONLY_FILES);
  1830. echo_debug("CT_SORTED_FILES path==" + CT_SORTED_FILES_fname);
  1831. }
  1832. /* remove server.xml files that are not Oracle related. */
  1833. runReturn = runCommand("findstr /v /i server.xml \"" + CT_SORTED_FILES_fname + "\"> noserverxml.txt",0);
  1834. if ( runReturn != 0 ) {
  1835. WINDOWSCMDERR.WriteLine("Command findstr /v /i server.xml " + CT_SORTED_FILES_fname + "> noserverxml.txt returned with error code: " + runReturn );
  1836. }
  1837. runReturn = runCommand("findstr /i server.xml \"" + CT_SORTED_FILES_fname + "\"> allserverxml.txt",0);
  1838. if ( runReturn != 0 ) {
  1839. WINDOWSCMDERR.WriteLine("Command findstr /i server.xml " + CT_SORTED_FILES_fname + "> allserverxml.txt returned with error code: " + runReturn );
  1840. }
  1841. runReturn = runCommand("findstr /i j2ee allserverxml.txt > j2eeserverxml.txt",0);
  1842. if ( runReturn != 0 ) {
  1843. WINDOWSCMDERR.WriteLine("Command findstr /i j2ee allserverxml.txt > j2eeserverxml.txt returned with error code: " + runReturn );
  1844. }
  1845. runReturn = runCommand("type noserverxml.txt >> j2eeserverxml.txt",0);
  1846. if ( runReturn != 0 ) {
  1847. WINDOWSCMDERR.WriteLine("Command type noserverxml.txt >> j2eeserverxml.txt returned with error code: " + runReturn );
  1848. }
  1849. runReturn = runCommand("type j2eeserverxml.txt >\"" + CT_SORTED_FILES_fname +"\"",0);
  1850. if ( runReturn != 0 ) {
  1851. WINDOWSCMDERR.WriteLine("Command type j2eeserverxml.txt >" + CT_SORTED_FILES_fname + " returned with error code: " + runReturn );
  1852. }
  1853. //check for valid config.xml
  1854. //create a config.xml only list
  1855. runReturn = runCommand("findstr /i config.xml j2eeserverxml.txt> allconfigs.txt",0);
  1856. if ( runReturn != 0 ) {
  1857. WINDOWSCMDERR.WriteLine("Command findstr /i config.xml j2eeserverxml.txt> allconfigs.txt, returned with error code: " + runReturn );
  1858. }
  1859. //create a sorted list without config.xml
  1860. runReturn = runCommand("findstr /v /i config.xml j2eeserverxml.txt> noconfigs.txt",0);
  1861. if ( runReturn != 0 ) {
  1862. WINDOWSCMDERR.WriteLine("Command findstr /v /i config.xml j2eeserverxml.txt> noconfigs.txt, returned with error code: " + runReturn );
  1863. }
  1864. //get config.xml files that end with contain <domain></domain> tags
  1865. runReturn = runCommand("findstr /M /i /f:allconfigs.txt \"</domain>\" > oracleConfigs.txt",0);
  1866. if ( runReturn != 0 ) {
  1867. WINDOWSCMDERR.WriteLine("Command findstr /M /i /f:allconfigs.txt \"</domain>\" > oracleConfigs.txt returned with error code: " + runReturn );
  1868. }
  1869. //append the noserver.xml list with the j2ee server.xml list
  1870. runReturn = runCommand("type oracleConfigs.txt >> noconfigs.txt",0);
  1871. if ( runReturn != 0 ) {
  1872. WINDOWSCMDERR.WriteLine("Command type noserverxml.txt >> noconfigs.txt returned with error code: " + runReturn );
  1873. }
  1874. //create a new CT_SORTED_FILES with the resulting file
  1875. runReturn = runCommand("type noconfigs.txt >\"" + CT_SORTED_FILES_fname +"\"",0);
  1876. if ( runReturn != 0 ) {
  1877. WINDOWSCMDERR.WriteLine("Command type noconfigs.txt >>" + CT_SORTED_FILES_fname + " returned with error code: " + runReturn );
  1878. }
  1879. // delete temp files
  1880. fso.DeleteFile("allconfigs.txt");
  1881. fso.DeleteFile("noconfigs.txt");
  1882. fso.DeleteFile("noserverxml.txt");
  1883. fso.DeleteFile("j2eeserverxml.txt");
  1884. fso.DeleteFile("allserverxml.txt");
  1885. }
  1886. /***
  1887. * fileCopy() - function to copy files to the output dir.
  1888. */
  1889. function fileCopy(fileProcessed, numProccessed)
  1890. {
  1891. // debug - Add debug info
  1892. //WScript.Echo("debug.function.fileCopy");
  1893. //WScript.Echo("debug.processing.file"+numProcessed+".copy="+fileProccessed);
  1894. // obtain timestamp for all copied files
  1895. fileTimestamp(fileProcessed,numProccessed);
  1896. CT_RESULTS_FILE.WriteLine("processing.file" + numProccessed + ".copy.data="+fileProcessed);
  1897. CT_RESULTS_FILE.WriteLine("[COPY_TAG_BEGIN]");
  1898. // post command to results file
  1899. var fCopy = fso.GetFile(fileProcessed);
  1900. var ts = fCopy.OpenAsTextStream(ForReading, TristateFalse);
  1901. while (!ts.AtEndOfStream){
  1902. CT_RESULTS_FILE.WriteLine(ts.ReadLine());
  1903. }
  1904. CT_RESULTS_FILE.WriteLine("\n[COPY_TAG_END]");
  1905. }
  1906. /***
  1907. * fileTail() - function to print the last few lines of a file to the LOGS.
  1908. */
  1909. function fileTail(fileProcessed, numProccessed)
  1910. {
  1911. //debug
  1912. //WScript.Echo("debug.function.fileTail");
  1913. //WScript.Echo("debug.processing.file"+numProcessed+".tail="+fileProccessed);
  1914. CT_LOGS_FILE.WriteLine("processing.file" + numProccessed + ".tail.data="+fileProcessed);
  1915. CT_LOGS_FILE.WriteLine("[TAIL_TAG_BEGIN]");
  1916. var strFile, objFile, arrFileLen, tailStart;
  1917. var arrFile = new Array ();
  1918. // open file as a stream, input lines into array
  1919. objFile = fso.GetFile(fileProcessed);
  1920. var strFile = objFile.OpenAsTextStream(ForReading, TristateFalse);
  1921. arrFileLen = 0;
  1922. while (!strFile.AtEndOfStream){
  1923. arrFile[arrFileLen] = strFile.ReadLine();
  1924. arrFileLen++;
  1925. }
  1926. // if arrFileLen > 20 tail the last 20 lines, else tail the whole file.
  1927. if ( arrFileLen > 20 )
  1928. tailStart = arrFileLen - 20;
  1929. else
  1930. tailStart = 0;
  1931. if ( arrFileLen == 0 )
  1932. CT_LOGS_FILE.WriteLine("Log file is empty");
  1933. else {
  1934. for (var ii = tailStart; ii<arrFileLen; ii++)
  1935. {
  1936. CT_LOGS_FILE.WriteLine(arrFile[ii]);
  1937. }
  1938. }
  1939. CT_LOGS_FILE.WriteLine("\n[TAIL_TAG_END]");
  1940. }
  1941. /**
  1942. * fileTimestamp() - list the files and dates of a file.
  1943. */
  1944. function fileTimestamp(fileProcessed, numProccessed) {
  1945. //debug
  1946. //WScript.Echo("debug.function.fileTimestamp");
  1947. //WScript.Echo("debug.processing.file" + numProccessed + ".timestamp=" +fileProcessed);
  1948. var fObj, fAttrib;
  1949. CT_RESULTS_FILE.WriteLine("processing.file" + numProccessed + ".timestamp.data="+fileProcessed);
  1950. CT_RESULTS_FILE.WriteLine("[TIMESTAMP_TAG_BEGIN]");
  1951. // post command to results file
  1952. CT_RESULTS_FILE.WriteLine("Date Created\t\t\t\t\t\tDate Last Modified\t\t\t\tFile Name");
  1953. CT_RESULTS_FILE.WriteLine("------------\t\t\t\t\t\t------------------\t\t\t\t----------");
  1954. fObj = fso.GetFile(fileProcessed);
  1955. fAttrib = fObj.DateLastModified + "\t\t" +fObj.DateCreated + "\t\t" + fObj.Name;
  1956. CT_RESULTS_FILE.WriteLine(fAttrib);
  1957. CT_RESULTS_FILE.WriteLine("[TIMESTAMP_TAG_END]");
  1958. }
  1959. /***
  1960. * fileListing() - list the files and dates of a directory.
  1961. */
  1962. function fileListing(fileProcessed, numProccessed) {
  1963. //debug
  1964. //WScript.Echo("debug.function.fileTail");
  1965. //WScript.Echo("debug.processing.file"+numProcessed+".tail="+fileProccessed);
  1966. CT_RESULTS_FILE.WriteLine("processing.file"+numProccessed +".listing.data="+fileProcessed);
  1967. CT_RESULTS_FILE.WriteLine("[LISTING_TAG_BEGIN]");
  1968. var fItem;
  1969. var DIR_NAME = fso.GetFile(fileProcessed).ParentFolder;
  1970. var folderList = new Enumerator(DIR_NAME.Files);
  1971. var fAttrib;
  1972. CT_RESULTS_FILE.WriteLine("Date Created\t\t\t\t\t\tDate Last Modified\t\t\t\t\tFile Name");
  1973. CT_RESULTS_FILE.WriteLine("------------\t\t\t\t\t\t------------------\t\t\t\t----------");
  1974. for (; !folderList.atEnd(); folderList.moveNext())
  1975. {
  1976. fItem = fso.GetFile(folderList.item());
  1977. fAttrib = fItem.DateLastModified + "\t\t" +fItem.DateCreated + "\t\t" + fItem.Name;
  1978. CT_RESULTS_FILE.WriteLine(fAttrib);
  1979. }
  1980. CT_RESULTS_FILE.WriteLine("[LISTING_TAG_END]");
  1981. }
  1982. /**
  1983. * bundleResults(fileProcessed, numProccessed) - copy files to output.
  1984. *
  1985. */
  1986. function bundleResults(fileProcessed, numProccessed) {
  1987. // debug
  1988. //WScript.Echo("debug.function.bundleResults");
  1989. //WScript.Echo("debug.processing.file"+numProccessed+".tar="+fileProcessed);
  1990. var fDest = CT_TMP + "FMW\\" + fileProcessed.replace(":","");
  1991. var fIndex = fDest.lastIndexOf("\\") + 1;
  1992. var dirDest = fDest.substring(0,fIndex);
  1993. if ( DEBUG )
  1994. echo_debug("Copy from:" +fileProcessed +" to:" +fDest);
  1995. try
  1996. {
  1997. createDirectoryFromPath(dirDest);
  1998. }
  1999. catch (exception)
  2000. {
  2001. WINDOWSCMDERR.WriteLine("The directory " + dirDest + " can not be created. Exception:" + exception);
  2002. }
  2003. try {
  2004. if ( fso.FileExists(fileProcessed) )
  2005. {
  2006. fso.CopyFile(fileProcessed, fDest);
  2007. if ( fileProcessed.indexOf("config.xml") == -1 )
  2008. CT_ACTIONS_RESULTS_FILE.Writeline("Zip up "+ fileProcessed);
  2009. } else if ( fso.FolderExists(fileProcessed) )
  2010. {
  2011. fso.CopyFolder(fileProcessed, fDest);
  2012. CT_ACTIONS_RESULTS_FILE.Writeline("Zip up "+ fileProcessed);
  2013. }
  2014. }
  2015. catch (exception)
  2016. {
  2017. echo_logs("CT: CT-00026: ERROR: The file " + fileProcessed + " can not be copied. Exception:" + exception.description,"Errors");
  2018. }
  2019. }
  2020. /**
  2021. * zipFiles() - compress the bundled files.
  2022. *
  2023. */
  2024. function zipFiles() {
  2025. // bundled results file
  2026. // create as zip
  2027. var CT_TAR_FILE_SUFF = "";
  2028. var CT_TAR_FILE_fname = "";
  2029. if ( MASK_DATA == "" )
  2030. {
  2031. CT_TAR_FILE_SUFF = "Collection-" + MACHINE_NAME + PRODUCTSRUN + ".zip";
  2032. } else {
  2033. CT_TAR_FILE_SUFF = "Collection-" + MACHINE_NAME + PRODUCTSRUN + "-masked.zip";
  2034. }
  2035. CT_TAR_FILE_fname = OUTPUT_DIR + CT_TAR_FILE_SUFF;
  2036. if ( fso.FileExists(CT_TAR_FILE_fname) ) {
  2037. fso.CopyFile(CT_TAR_FILE_fname, CT_TAR_FILE_fname + ZIPTIMESTAMP);
  2038. }
  2039. var objShell = new ActiveXObject("shell.application");
  2040. var zipFolder = new Object;
  2041. var sourceItems = new Object;
  2042. var objFolder = new Object;
  2043. // if we don't want to collect CT Debug files, then delete debug folder here.
  2044. if ( !COLLECT_CT_DEBUG ) {
  2045. if ( !DEBUG ) {
  2046. try {
  2047. fso.DeleteFolder(CT_DEBUG.slice(0,-1));
  2048. } catch (e)
  2049. {
  2050. }
  2051. }
  2052. }
  2053. objFolder = objShell.NameSpace(CT_TMP);
  2054. for(var objEnum = new Enumerator(objFolder.items()); !objEnum.atEnd(); objEnum.moveNext()) {
  2055. numItems = objShell.NameSpace(objEnum.item()).items();
  2056. if ( numItems.Count == 0 ) {
  2057. fso.DeleteFolder(CT_TMP + "\\" + objEnum.item());
  2058. }
  2059. }
  2060. sourceItems = objFolder.items();
  2061. var CT_TAR_FILE = fso.CreateTextFile(CT_TAR_FILE_fname, true);
  2062. CT_TAR_FILE.write("PK");
  2063. CT_TAR_FILE.write(String.fromCharCode(5));
  2064. CT_TAR_FILE.write(String.fromCharCode(6));
  2065. CT_TAR_FILE.write('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
  2066. CT_TAR_FILE.Close();
  2067. zipFolder = objShell.NameSpace(CT_TAR_FILE_fname);
  2068. var sourceCount = sourceItems.Count;
  2069. var zipCount;
  2070. if ( zipFolder != null ) {
  2071. zipFolder.CopyHere(sourceItems, 1044);
  2072. do
  2073. {
  2074. WScript.Sleep(500);
  2075. zipCount = zipFolder.items().Count;
  2076. } while (sourceCount != zipCount);
  2077. }
  2078. WScript.Sleep(1000);
  2079. if ( ! fso.FileExists(OUTPUT_DIR + CT_TAR_FILE_SUFF) ) {
  2080. if ( WARNING_EMPTY ) {
  2081. WScript.Echo("\n## CT ## Warnings\n");
  2082. WARNING_EMPTY = false;
  2083. }
  2084. WScript.Echo("CT: CT-00112: WARNING: Could not compress output file directory " + OUTPUT_DIR,". Please use 7zip or similar to compress and send to your assigned consultant.","Warnings");
  2085. } else {
  2086. WScript.Echo("Successfully compressed the results file " + OUTPUT_DIR + CT_TAR_FILE_SUFF);
  2087. WScript.Echo("\nCollection process is completed, please forward " + OUTPUT_DIR + CT_TAR_FILE_SUFF + " to your assigned consultant.");
  2088. }
  2089. }
  2090. /**
  2091. * zipDebug() - compress the debug_folder.
  2092. *
  2093. */
  2094. function zipDebug() {
  2095. // bundled results file
  2096. // create as zip
  2097. var CT_DEBUG_TAR_FILE_fname = "";
  2098. var CT_DEBUG_TAR_FILE_SUFF = "";
  2099. if ( MASK_DATA == "" )
  2100. {
  2101. CT_DEBUG_TAR_FILE_SUFF = "debug_Collection-" + MACHINE_NAME + PRODUCTSRUN + ".zip";
  2102. } else {
  2103. CT_DEBUG_TAR_FILE_SUFF = "debug_Collection-" + MACHINE_NAME + PRODUCTSRUN + "-masked.zip";
  2104. }
  2105. CT_DEBUG_TAR_FILE_fname = OUTPUT_DIR + CT_DEBUG_TAR_FILE_SUFF;
  2106. if ( fso.FileExists(CT_DEBUG_TAR_FILE_fname) ) {
  2107. fso.CopyFile(CT_DEBUG_TAR_FILE_fname, CT_DEBUG_TAR_FILE_fname + ZIPTIMESTAMP);
  2108. }
  2109. var objShell = new ActiveXObject("shell.application");
  2110. var zipFolder = new Object;
  2111. var sourceItems = new Object;
  2112. var objFolder = new Object;
  2113. objFolder = objShell.NameSpace(CT_TMP+"debug\\");
  2114. sourceItems = objFolder.items();
  2115. var CT_DEBUG_TAR_FILE = fso.CreateTextFile(CT_DEBUG_TAR_FILE_fname, true);
  2116. CT_DEBUG_TAR_FILE.write("PK");
  2117. CT_DEBUG_TAR_FILE.write(String.fromCharCode(5));
  2118. CT_DEBUG_TAR_FILE.write(String.fromCharCode(6));
  2119. CT_DEBUG_TAR_FILE.write('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0');
  2120. CT_DEBUG_TAR_FILE.Close();
  2121. zipFolder = objShell.NameSpace(CT_DEBUG_TAR_FILE_fname);
  2122. var sourceCount = sourceItems.Count;
  2123. var zipCount;
  2124. if ( zipFolder != null ) {
  2125. zipFolder.CopyHere(sourceItems, 1044);
  2126. do
  2127. {
  2128. WScript.Sleep(500);
  2129. zipCount = zipFolder.items().Count;
  2130. } while (sourceCount != zipCount);
  2131. }
  2132. WScript.Sleep(1000);
  2133. if ( ! fso.FileExists(CT_DEBUG_TAR_FILE_fname) ) {
  2134. if ( WARNING_EMPTY ) {
  2135. WScript.Echo("\n## CT ## Warnings\n");
  2136. WARNING_EMPTY = false;
  2137. }
  2138. WScript.Echo("CT: CT-00113: WARNING: Could not compress debug file directory " + CT_DEBUG_TAR_FILE_fname,"Warnings");
  2139. } else {
  2140. if ( WARNING_EMPTY ) {
  2141. WScript.Echo("\n## CT ## Warnings\n");
  2142. WARNING_EMPTY = false;
  2143. }
  2144. WScript.Echo("CT: CT-00114: WARNING: Please note that for debugging purposes the following archive file was created in the output folder:" + CT_DEBUG_TAR_FILE_fname + "\n");
  2145. }
  2146. try {
  2147. fso.DeleteFolder(CT_DEBUG.slice(0,-1));
  2148. } catch (e)
  2149. {
  2150. }
  2151. }
  2152. /**
  2153. *
  2154. * fileAction() input a list of filenames and assign them to the right action.
  2155. *
  2156. */
  2157. function fileAction() {
  2158. var NUMPROCESSFILE = 0;
  2159. var fs = fso.OpenTextFile(CT_SORTED_FILES_fname, ForReading, "True");
  2160. var fObj, FILE_NAME, PROCESS_FILE_NAME, PRODUCT_FILE_BASENAME;
  2161. var bundlefilesArray = BUNDLEFILES.split(",");
  2162. var tsfilesArray = TSFILES.split(",");
  2163. var tailfilesArray = TAILFILES.split(",");
  2164. var listingfilesArray = LISTINGFILES.split(",");
  2165. var copyfilesArray = COPYFILES.split(",");
  2166. var collectrmfilesArray = COLLECTRMDATAFILES.split(",");
  2167. var matchB,regex,result;
  2168. while (!fs.AtEndOfStream) {
  2169. //read the filenames from the file
  2170. FILE_NAME = fs.ReadLine();
  2171. try {
  2172. NUMPROCESSFILE += 1;
  2173. fObj = fso.GetFile(FILE_NAME);
  2174. //get full path and File name from text file
  2175. PROCESS_FILE_NAME = fObj.Path;
  2176. //get just file name
  2177. PRODUCT_FILE_BASENAME = fObj.Name;
  2178. //Write processing info to CT results
  2179. CT_RESULTS_FILE.WriteLine("Processing file " + NUMPROCESSFILE + " name=" + FILE_NAME);
  2180. //Check the file processing tags, take appropriate action
  2181. for (var ii=0; ii<bundlefilesArray.length - 1; ii++)
  2182. {
  2183. if ( bundlefilesArray[ii].substring(0,1) == "*" )
  2184. {
  2185. regex = bundlefilesArray[ii].substring(1);
  2186. } else {
  2187. regex = bundlefilesArray[ii];
  2188. }
  2189. result = PRODUCT_FILE_BASENAME.match(regex);
  2190. if ( result != null ) {
  2191. bundleResults(FILE_NAME,NUMPROCESSFILE);
  2192. break;
  2193. }
  2194. }
  2195. for (var ii=0; ii<tsfilesArray.length - 1; ii++)
  2196. {
  2197. if ( tsfilesArray[ii].substring(0,1) == "*" )
  2198. {
  2199. regex = tsfilesArray[ii].substring(1);
  2200. } else if ( tsfilesArray[ii].indexOf("*") != -1 )
  2201. {
  2202. regex = tsfilesArray[ii].substring(0,tsfilesArray[ii].indexOf("*") - 1 );
  2203. } else {
  2204. regex = tsfilesArray[ii];
  2205. }
  2206. result = PRODUCT_FILE_BASENAME.match(regex);
  2207. if ( result != null ) {
  2208. fileTimestamp(FILE_NAME,NUMPROCESSFILE);
  2209. break;
  2210. }
  2211. }
  2212. for (var ii=0; ii<tailfilesArray.length - 1; ii++)
  2213. {
  2214. if ( tailfilesArray[ii].substring(0,1) == "*" )
  2215. {
  2216. regex = tailfilesArray[ii].substring(1);
  2217. } else if ( tailfilesArray[ii].indexOf("*") != -1 )
  2218. {
  2219. regex = tailfilesArray[ii].substring(0,tailfilesArray[ii].indexOf("*") - 1 );
  2220. } else {
  2221. regex = tailfilesArray[ii];
  2222. }
  2223. result = PRODUCT_FILE_BASENAME.match(regex);
  2224. if ( result != null ) {
  2225. fileTail(FILE_NAME,NUMPROCESSFILE);
  2226. break;
  2227. }
  2228. }
  2229. for (var ii=0; ii<listingfilesArray.length - 1; ii++)
  2230. {
  2231. if ( listingfilesArray[ii].substring(0,1) == "*" )
  2232. {
  2233. regex = listingfilesArray[ii].substring(1);
  2234. } else {
  2235. regex = listingfilesArray[ii];
  2236. }
  2237. result = PRODUCT_FILE_BASENAME.match(regex);
  2238. if ( result != null ) {
  2239. fileListing(FILE_NAME,NUMPROCESSFILE);
  2240. break;
  2241. }
  2242. }
  2243. for (var ii=0; ii<copyfilesArray.length - 1; ii++)
  2244. {
  2245. if ( copyfilesArray[ii].substring(0,1) == "*" )
  2246. {
  2247. regex = copyfilesArray[ii].substring(1);
  2248. } else {
  2249. regex = copyfilesArray[ii];
  2250. }
  2251. result = PRODUCT_FILE_BASENAME.match(regex);
  2252. if ( result != null ) {
  2253. fileCopy(FILE_NAME,NUMPROCESSFILE);
  2254. break;
  2255. }
  2256. }
  2257. for (var ii=0; ii<collectrmfilesArray.length - 1; ii++)
  2258. {
  2259. if ( collectrmfilesArray[ii].substring(0,1) == "*" )
  2260. {
  2261. regex = collectrmfilesArray[ii].substring(1);
  2262. } else {
  2263. regex = collectrmfilesArray[ii];
  2264. }
  2265. if ( collectrmfilesArray[ii].slice(-1) == "*" )
  2266. {
  2267. regex = collectrmfilesArray[ii].slice(0,-1);
  2268. } else {
  2269. regex = collectrmfilesArray[ii];
  2270. }
  2271. result = PRODUCT_FILE_BASENAME.match(regex);
  2272. if ( result != null ) {
  2273. bundleResults(FILE_NAME,NUMPROCESSFILE);
  2274. rmData(FILE_NAME,NUMPROCESSFILE);
  2275. break;
  2276. }
  2277. }
  2278. } catch ( ex ) {
  2279. //Write processing info to CT results
  2280. CT_RESULTS_FILE.WriteLine("Error processing file " + NUMPROCESSFILE + " " + FILE_NAME);
  2281. }
  2282. }
  2283. fs.Close();
  2284. }
  2285. /**
  2286. * printMachineInfo() function to print out the results from the cpuq and results.
  2287. *
  2288. */
  2289. function printMachineInfo() {
  2290. //NUMIPADDR=0
  2291. var options = "";
  2292. // print script information
  2293. CT_MACHINFO_FILE.WriteLine("[BEGIN SCRIPT INFO]");
  2294. CT_MACHINFO_FILE.WriteLine("Script Name=" + SCRIPT_NAME);
  2295. CT_MACHINFO_FILE.WriteLine("Script Version=" + SCRIPT_VERSION);
  2296. // loop through SCRIPT_OPTIONS array to get a single string with the options.
  2297. for (var ii = 0; ii < SCRIPT_OPTIONS.length; ii++)
  2298. options += SCRIPT_OPTIONS(ii) + " ";
  2299. CT_MACHINFO_FILE.WriteLine("Script Command options=" + options);
  2300. CT_MACHINFO_FILE.WriteLine("Available Drives and types=");
  2301. var allDriveTypes = GetAllDriveList();
  2302. for (var ii = 0; ii < allDriveTypes.length; ii++)
  2303. CT_MACHINFO_FILE.WriteLine(allDriveTypes[ii]);
  2304. CT_MACHINFO_FILE.WriteLine("Script Filter File options=");
  2305. //open and read the filter file
  2306. var filterFile = fso.OpenTextFile(fso.getFolder("..").path + "\\resources\\util\\file_sort_list_win.txt" , ForReading, "True");
  2307. while (!filterFile.AtEndOfStream)
  2308. CT_MACHINFO_FILE.WriteLine(filterFile.ReadLine());
  2309. filterFile.Close();
  2310. CT_MACHINFO_FILE.WriteLine("[END SCRIPT INFO]");
  2311. CT_MACHINFO_FILE.WriteLine("[BEGIN ORACLE PROCESS INFO]");
  2312. // use WMI Objects to get running processes.
  2313. var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
  2314. //set up process statements
  2315. var processStatement = "SELECT * FROM Win32_Process WHERE Name = '";
  2316. var processArray;
  2317. processArray = PROCESSLIST.split(',');
  2318. // Go through PROCESSLIST, add to statment, transform to Windows exe or .cmd as necessary.
  2319. for (var ii=0; ii<processArray.length; ii++)
  2320. {
  2321. var dotIndex = processArray[ii].indexOf(".");
  2322. if ( dotIndex <= 0 && ii != (processArray.length - 1) )
  2323. processStatement += processArray[ii] +".exe' OR Name = '";
  2324. else if ( ii != (processArray.length - 1) )
  2325. processStatement += processArray[ii].substring(0,dotIndex) +".cmd' OR Name = '";
  2326. }
  2327. // slice the last ' OR Name =' fromthe command statment.
  2328. processStatement = processStatement.slice(0,-12);
  2329. if ( DEBUG )
  2330. echo_debug("processStatement=="+processStatement);
  2331. // Execute and enumerate WMI statement for Windows processes.
  2332. var colItems = objWMIService.ExecQuery(processStatement, "WQL",
  2333. wbemFlagReturnImmediately | wbemFlagForwardOnly);
  2334. var enumItems = new Enumerator(colItems);
  2335. // set up password and user regex
  2336. var cmdLineUserRegex = new RegExp("(user.*=)","i");
  2337. var cmdLinePassRegex = new RegExp("(pass.*=)","i");
  2338. var cmdLineUserMatch, cmdLinePassMatch;
  2339. var regexMatchCMDGI,regexMatchPassGI;
  2340. var tempProcessLine;
  2341. try {
  2342. var rmdataWin = fso.OpenTextFile(fso.getFolder("..").path + "\\resources\\util\\common\\bin\\rmdata_win.txt", ForReading, "True");
  2343. while (!rmdataWin.AtEndOfStream) {
  2344. rmDataText = rmdataWin.ReadAll();
  2345. }
  2346. var regexArray = rmDataText.split('\n');
  2347. rmdataWin.Close();
  2348. }
  2349. catch (exception)
  2350. {
  2351. echo_logs("CT: CT-00028: ERROR: Unable to remove open data removal input file. Exception:" + exception.description,"Errors");
  2352. }
  2353. var rmProcessDataRegex;
  2354. var resultMatch;
  2355. for (; !enumItems.atEnd(); enumItems.moveNext()) {
  2356. var objItem = enumItems.item();
  2357. CT_MACHINFO_FILE.WriteLine("-------------------------------------------");
  2358. CT_MACHINFO_FILE.WriteLine("Name: " + objItem.Name);
  2359. CT_MACHINFO_FILE.WriteLine("ExecutablePath: " + objItem.ExecutablePath);
  2360. tempProcessLine = objItem.CommandLine;
  2361. for (var ii=0; ii<regexArray.length; ii += 2 )
  2362. {
  2363. rmProcessDataRegex = RegExp(regexArray[ii],"i");
  2364. resultMatch = tempProcessLine.match(rmProcessDataRegex);
  2365. if ( resultMatch != null ) {
  2366. rmProcessDataRegexGI = RegExp(regexArray[ii],"gi");
  2367. tempProcessLine = tempProcessLine.replace(rmProcessDataRegexGI, regexArray[ii+1]);
  2368. }
  2369. }
  2370. CT_MACHINFO_FILE.WriteLine("CommandLine: " + tempProcessLine);
  2371. }
  2372. CT_MACHINFO_FILE.WriteLine("[END ORACLE PROCESS INFO]");
  2373. }
  2374. /**
  2375. * printResults - print out the search results
  2376. */
  2377. function printResults() {
  2378. var tmpFile;
  2379. var line;
  2380. var LOGFILES;
  2381. var COLLECTEDLOGFILE, ERRORLOGFILE, WARNINGLOGFILE;
  2382. var COLLECTEDLOG = "";
  2383. var ERRORLOG = ""
  2384. var WARNINGLOG = "";
  2385. try {
  2386. LOGFILES = ShowFiles(CT_TMP + "logs\\");
  2387. for(; !LOGFILES.atEnd(); LOGFILES.moveNext()) {
  2388. tmpFile = String(LOGFILES.item());
  2389. if ( tmpFile.indexOf("collected.log") != -1 )
  2390. {
  2391. try {
  2392. COLLECTEDLOGFILE = fso.OpenTextFile(tmpFile, ForReading, "True");
  2393. while (!COLLECTEDLOGFILE.AtEndOfStream)
  2394. {
  2395. line = COLLECTEDLOGFILE.ReadLine();
  2396. COLLECTEDLOG += line + "\n";
  2397. }
  2398. COLLECTEDLOGFILE.Close();
  2399. } catch (exception) {
  2400. WScript.Echo("Can't open Collected Log files.\n");
  2401. }
  2402. } else if ( tmpFile.indexOf("warnings.log") != -1 )
  2403. {
  2404. try {
  2405. WARNINGLOGFILE = fso.OpenTextFile(tmpFile, ForReading, "True");
  2406. while (!WARNINGLOGFILE.AtEndOfStream)
  2407. {
  2408. line = WARNINGLOGFILE.ReadLine();
  2409. WARNINGLOG += line + "\n";
  2410. }
  2411. WARNINGLOGFILE.Close();
  2412. } catch (exception) {
  2413. WScript.Echo("Can't open Warning Log files.\n");
  2414. }
  2415. } else if ( tmpFile.indexOf("errors.log") != -1 )
  2416. {
  2417. try {
  2418. ERRORLOGFILE = fso.OpenTextFile(tmpFile, ForReading, "True");
  2419. while (!ERRORLOGFILE.AtEndOfStream)
  2420. {
  2421. line = ERRORLOGFILE.ReadLine();
  2422. ERRORLOG += line + "\n";
  2423. }
  2424. ERRORLOGFILE.Close();
  2425. } catch (exception) {
  2426. WScript.Echo("Can't open Error Log files.\n");
  2427. }
  2428. }
  2429. }
  2430. } catch (exception) {
  2431. WScript.Echo("Can't open Log files.\n");
  2432. }
  2433. if ( COLLECTEDLOG != "" ) {
  2434. WScript.Echo("\n## CT ## Collected\n");
  2435. WScript.Echo(COLLECTEDLOG);
  2436. }
  2437. CT_RESULTS_SUMMARY_FILE.WriteLine("\n## CT ## Collected\n");
  2438. CT_RESULTS_SUMMARY_FILE.WriteLine(COLLECTEDLOG);
  2439. if ( WARNINGLOG != "" ) {
  2440. WScript.Echo("\n## CT ## Warnings\n");
  2441. WScript.Echo(WARNINGLOG);
  2442. } else
  2443. WARNING_EMPTY = true;
  2444. CT_RESULTS_SUMMARY_FILE.WriteLine("\n## CT ## Warnings\n");
  2445. CT_RESULTS_SUMMARY_FILE.WriteLine(WARNINGLOG);
  2446. if ( ERRORLOG != "" ) {
  2447. WScript.Echo("\n## CT ## Errors\n");
  2448. WScript.Echo(ERRORLOG);
  2449. } else
  2450. ERRORS_EMTPY = true;
  2451. CT_RESULTS_SUMMARY_FILE.WriteLine("\n## CT ## Errors\n");
  2452. CT_RESULTS_SUMMARY_FILE.WriteLine(ERRORLOG);
  2453. CT_DEBUG_FILE.Close();
  2454. //CT_DEBUG_FILE_fname = TMPDIR + "\\CTdebugfile.txt";
  2455. CT_DEBUG_FILE = fso.OpenTextFile(CT_DEBUG_FILE_fname, ForReading, "True");
  2456. if ( DEBUG )
  2457. {
  2458. var f = CT_DEBUG_FILE;
  2459. while (!f.AtEndOfStream){
  2460. WScript.echo(f.ReadLine());
  2461. }
  2462. }
  2463. CT_DEBUG_FILE.Close();
  2464. }
  2465. /**
  2466. * maskResults() - use perl script to mask the results of the output file.
  2467. *
  2468. */
  2469. function maskResults() {
  2470. // use runcommand to execute Perl Script
  2471. var perlError;
  2472. var perlDocsError;
  2473. perlError = runCommand("perl maskdata.pl \"" + CT_TMP.slice(0,-1) + "\" " + MASK_DATA, 0 );
  2474. if ( perlError > 0 ) {
  2475. echo_logs("CT: CT-00023: ERROR: Perl error while masking data occured. Please see documentation for troubleshooting instructions." ,"Errors");
  2476. MASK_DATA = "";
  2477. }
  2478. }
  2479. /**
  2480. * configsCollected() - find the directories where configs where collected.
  2481. *
  2482. */
  2483. function configsCollected() {
  2484. var runReturn;
  2485. var configIndex;
  2486. var FMW_DOMAINS;
  2487. var lineconfigs;
  2488. runReturn = runCommand("findstr \"Zip\" \"" + CT_ACTIONS_RESULTS_FILE_fname + "\" \| findstr \"config.xml\" > configs.txt",0);
  2489. if ( runReturn != 0 ) {
  2490. WINDOWSCMDERR.WriteLine("findstr \"Zip\" " + CT_ACTIONS_RESULTS_FILE_fname + " \| findstr \"config.xml\" > configs.txt returned with error code: " + runReturn );
  2491. }
  2492. var ConfigsCollectedRead = fso.OpenTextFile(fso.getFolder(".").path + "\\configs.txt", 1, "True");
  2493. try {
  2494. while (!ConfigsCollectedRead.AtEndOfStream){
  2495. lineconfigs = ConfigsCollectedRead.ReadLine(); // Read Data
  2496. configIndex = lineconfigs.indexOf("\\config\\");
  2497. if ( configIndex != -1 ) {
  2498. FMW_DOMAINS = lineconfigs.substring(7,configIndex);
  2499. echo_logs("CT: CT-00200: COLLECTED: FMW configuration files for " + FMW_DOMAINS,"Collected");
  2500. }
  2501. }
  2502. ConfigsCollectedRead.Close();
  2503. fso.DeleteFile(fso.getFolder(".").path + "\\configs.txt");
  2504. } catch (exception) {
  2505. }
  2506. }