1 2 /** 3 * @name CeL function for WMI 4 * @fileoverview 5 * 本檔案包含了 WMI 的 functions。 6 * @since 7 */ 8 9 if (typeof CeL === 'function'){ 10 11 /** 12 * 本 module 之 name(id),<span style="text-decoration:line-through;">不設定時會從呼叫時之 path 取得</span>。 13 * @type String 14 * @constant 15 * @inner 16 * @ignore 17 */ 18 var module_name = 'OS.Windows.WMI'; 19 20 //=================================================== 21 /** 22 * 若欲 include 整個 module 時,需囊括之 code。 23 * @type Function 24 * @param {Function} library_namespace namespace of library 25 * @param load_arguments 呼叫時之 argument(s) 26 * @return 27 * @name CeL.OS.WMI 28 * @constant 29 * @inner 30 * @ignore 31 */ 32 var code_for_including = function(library_namespace, load_arguments) { 33 34 /** 35 * null module constructor 36 * @class WMI 的 functions 37 */ 38 CeL.OS.WMI 39 = function() { 40 // null module constructor 41 }; 42 43 /** 44 * for JSDT: 有 prototype 才會將之當作 Class 45 */ 46 CeL.OS.WMI 47 .prototype = { 48 }; 49 50 51 52 53 54 55 56 // WMI set ================== 57 58 /* 2007/5/22 23:34:43 59 WMI: Windows Management Instrumentation 60 http://www.codecomments.com/archive298-2004-5-203306.html 61 http://msdn2.microsoft.com/en-us/library/Aa394616 62 http://msdn2.microsoft.com/en-us/library/aa389290.aspx 63 http://msdn2.microsoft.com/en-us/library/aa389763.aspx 64 http://msdn2.microsoft.com/en-us/library/aa393854.aspx SWbemServices 65 http://msdn2.microsoft.com/en-us/library/ms525320.aspx 66 http://www.serverwatch.com/tutorials/article.php/1476831 67 http://www.serverwatch.com/tutorials/article.php/1476861 68 http://www.serverwatch.com/tutorials/article.php/1476871 69 http://www.serverwatch.com/tutorials/article.php/1476941 70 71 string moniker: 72 [[/root/]cimv2:][from[.v]] [/|\\]root[/|\\] 73 74 object moniker: 75 { 76 prefix:'WinMgmts:', // moniker prefix 77 security:'{impersonationLevel=impersonate}!', 78 computer:'.', // Computer string(localhost '.') 79 p:'cimv2', // '/root/' will auto added 80 path:'/root/cimv2', // Namespace e.g., \root\default 81 82 from:, // select from ~ 83 where:, // select from where ~ ** You MUST check the string yourself!! This function won't do it! 84 v:, // value to get 85 value:, // value used in moniker 86 87 flag:48, // flag to call SWbemServices.ExecQuery Method 88 } 89 90 prefix+security+computer+path+':'+from+'='+value http://msdn2.microsoft.com/en-us/library/aa389292.aspx 91 92 TODO: 93 多次呼叫最佳化 94 */ 95 function WMI_data(moniker,func){ // moniker, for each do function 96 var i,oWMIS,_m={ 97 prefix:'WinMgmts:' 98 ,security:'{impersonationLevel=impersonate}!' 99 ,computer:'.' 100 ,p:'cimv2' 101 ,path:'' 102 ,from:'' 103 ,value:'' 104 ,v:'' 105 ,flag:48 // 32: wbemFlagForwardOnly + 16: wbemFlagReturnImmediately 106 }; 107 if(!moniker) 108 moniker=''; 109 110 if(typeof moniker=='string'){ 111 // parse moniker 112 _m.from=moniker; 113 // 取得path 114 if(i=_m.from.match(/^([^:]+):([^\/\\]*)$/)){ 115 if(/^[\/\\]/.test(i[1]))_m.path=i[1];else _m.p=i[1]; 116 _m.from=i[2]; 117 } 118 // 取得from[.v] 119 if(i=_m.from.match(/^([^.]+)\.(.*)$/))_m.from=i[1],_m.v=i[2]; 120 }else for(i in moniker)_m[i]=moniker[i]; 121 122 // create object 123 try{ 124 //with(_m)alert(prefix+security+'//'+computer+(path||'/root/'+p)+(value||value===0?':'+from+'='+value:'')); 125 with(_m)oWMIS=GetObject(prefix+security+'//'+computer+(path||'/root/'+p) 126 //+(func||v?'':(from?':'+from+(value||value==0?'':'='+value):'')) // 有func||_m.v時無條件捨棄,到後面再搞。 127 +(value||value===0?':'+from+'='+value:'') 128 ); 129 //oLoc=new ActiveXObject("WbemScripting.SWbemLocator");oSvc=oLoc.ConnectServer(sComputer||null,"root\\default");oReg=oSvc.Get("StdRegProv"); // http://msdn.microsoft.com/library/en-us/wmisdk/wmi/swbemobject_execmethod_.asp 130 }catch(e){ 131 return; 132 /* useless? 133 try{ 134 with(new ActiveXObject("WbemScripting.SWbemLastError")) // Error Handling 135 return {ProviderName:ProviderName,ParameterInfo:ParameterInfo,Operation:Operation,Description:Description}; 136 }catch(_e){throw e;} 137 */ 138 } 139 if(!func&&!_m.from)return oWMIS; 140 141 // do search 142 var oE; 143 try{ 144 // http://msdn2.microsoft.com/en-us/library/aa393866.aspx 145 oE=oWMIS.ExecQuery('Select * From '+_m.from+(_m['where']?' Where '+_m.where:'') 146 ,'WQL' // String that contains the query language to be used. If specified, this value must be "WQL". 147 ,_m.flag 148 ); 149 }catch(e){ 150 // 程式庫未登錄。 151 // 此時 typeof oWMIS=='object' 152 popErr(e,0,'WMI_data: error occurred!'); 153 //if(438!=(e.number&0xFFFF))return; 154 return; // return {item:function(){}}; // or return a object using wbemQueryFlagPrototype 155 } 156 oE=new Enumerator(oE); // wbemFlagForwardOnly:32+wbemFlagReturnImmediately:16 157 //if(func)for(;!oE.atEnd()&&!func(oE.item());oE.moveNext()); 158 if(func)while(!oE.atEnd()&&!func(oE.item()))oE.moveNext(); 159 else return _m.v||_m.v===0?oE.item()?oE.item()[_m.v]:null:oE; 160 }; 161 162 /* 用在將 WMI date 轉成 javascript date, old: WMIDateStringToDate 163 http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0907.mspx 164 http://www.microsoft.com/technet/scriptcenter/resources/qanda/aug05/hey0802.mspx 165 166 TODO: 167 return ms 168 */ 169 WMI_data.DateStringToDate=function(t){ 170 if(!t)return new Date(0); 171 var m=(''+t).match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d+)?([+ \-]\d+)?$/); 172 // http://msdn2.microsoft.com/en-us/library/474de325.aspx 173 return m?new Date(m[1],m[2]-1,m[3],m[4],m[5],m[6],m[7]*1e3):t; // locale會自己調整 174 }; 175 176 /* 用在取得 WMI object 之 property 177 http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/other/wmi/ 178 http://msdn.microsoft.com/en-us/library/aa393741%28VS.85%29.aspx 179 */ 180 WMI_data.getProperties = function(o, is_VBA, is_Date) { 181 var oP = new Enumerator(o.Properties_), ph = {}, p; 182 while (!oP.atEnd()) { 183 o = p = oP.item(); 184 185 if (0 && o.Name === 'IPAddress') { 186 alert(p); 187 alert('' + p + '\n[' + (typeof p) + ']\n' 188 // +(new VBArray(p)).toArray() 189 + Object.prototype.toString.call(p)); 190 for (var i in p) 191 alert('' + Object.prototype.toString.call(p[i]) + '\n' + i + ' ' + p[i]); 192 } 193 194 // 自動別日期 195 if (typeof p == 'object' && /^\d{14}(\.\d+)?([+ \-]\d+)?$/.test('' + p)) 196 p = this.DateStringToDate(p); 197 // 自動別 VBA 198 else if (typeof p == 'unknown') 199 // from VBA_to_JSA() 200 try { 201 p = new VBArray(p).toArray(); 202 } catch (e) { 203 } 204 ; 205 ph[o.Name] = p; 206 oP.moveNext(); 207 } 208 209 // o=[];for(p in ph)o.push(p+': '+ph[p]);sl(o.join('\n')); 210 return ph; 211 }; 212 213 214 215 /* cause error! requires Windows 2003 DNS 216 http://forums.devshed.com/dns-36/dns-through-wmi-in-net-140427.html 217 http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/dns/server/ 218 http://www.113317.com/blog/article.asp?id=543 219 http://blogs.msdn.com/mpoulson/archive/2006/05/10/594950.aspx 220 http://www.ureader.com/message/3258511.aspx 221 http://www.scriptinganswers.com/forum/forum_posts.asp?TID=516&PID=3124 222 if(0){ 223 var qHost='213.22.211.in-addr.arpa',qIP=WMI_data({p:'MicrosoftDNS',from:'MicrosoftDNS_PTRType',where:"OwnerName='"+qHost+"'"}).item(); 224 alert(qIP.RecordData); 225 } 226 */ 227 228 229 230 231 /* 232 http://msdn2.microsoft.com/en-us/library/aa394239.aspx 233 http://tech.163.com/05/0406/10/1GL8FUG200091589.html 234 235 test: 236 with(getSysInfo())alert(Caption+' '+CSDVersion+' '+OtherTypeDescription+'(SP '+ServicePackMajorVersion+'.'+ServicePackMinorVersion+') [Version '+Version+']' 237 +'\nWindowsDirectory: '+WindowsDirectory 238 +'\nSystemDirectory: '+SystemDirectory 239 +'\nFreePhysicalMemory: '+turnSI(FreePhysicalMemory)+'/'+turnSI(PhysicalMemory)+'B ('+PhysicalMemory+' bytes)' 240 +'\nOSLanguage: '+OSLanguage+' (0x'+hex(OSLanguage)+')' // http://msdn.microsoft.com/zh-tw/library/system.globalization.cultureinfo%28VS.80%29.aspx 241 +'\nCountryCode: '+CountryCode 242 +'\nCodeSet: CP'+CodeSet // http://en.wikipedia.org/wiki/Code_page http://msdn.microsoft.com/en-us/library/dd317756%28VS.85%29.aspx 243 +'\nLocale: '+Locale 244 +'\nCurrentTimeZone: '+gDate(CurrentTimeZone*60*1000) 245 +'\nMUILanguages: '+MUILanguages 246 +'\nBootUpTime: '+LastBootUpTime.toLocaleString() 247 +'\nLocalDateTime: '+LocalDateTime.toLocaleString() 248 +'\n系統運行 Uptime: '+gDate(Uptime)//+' ms' 249 +'\n系統 counter: '+Timestamp+' s' 250 +'\nCSName: '+CSName 251 +'\nRegisteredUser: '+RegisteredUser 252 );WScript.Quit(); 253 */ 254 255 getSysInfo[generateCode.dLK]='WMI_data'; 256 function getSysInfo(){ 257 var o=WMI_data('Win32_OperatingSystem').item(),r; 258 with(o)r={ 259 Caption:o.Caption.replace(/\s+$/,''), // 系統 260 Name:o.Name, 261 CSDVersion:o.CSDVersion, 262 ServicePackMajorVersion:o.ServicePackMajorVersion||(isNaN(o.ServicePackMajorVersion)?'':0), 263 ServicePackMinorVersion:o.ServicePackMinorVersion||(isNaN(o.ServicePackMinorVersion)?'':0), 264 OtherTypeDescription:o.OtherTypeDescription||'', 265 Version:o.Version, // 系統版本 266 267 WindowsDirectory:o.WindowsDirectory, 268 SystemDirectory:o.SystemDirectory, 269 270 CSName:o.CSName, 271 RegisteredUser:o.RegisteredUser, 272 273 CurrentTimeZone:o.CurrentTimeZone, 274 // 系統最後一次啟動的時間 275 // see: WMI_data('Win32_PerfRawData_PerfOS_System.SystemUpTime') 276 LastBootUpTime : WMI_data.DateStringToDate(o.LastBootUpTime), 277 LocalDateTime : WMI_data.DateStringToDate(o.LocalDateTime), 278 OSLanguage : o.OSLanguage, 279 CountryCode : o.CountryCode, 280 CodeSet : o.CodeSet, 281 Locale : o.Locale, 282 MUILanguages : VBA_to_JSA(o.MUILanguages), 283 284 FreePhysicalMemory : o.FreePhysicalMemory, 285 PhysicalMemory : WMI_data('Win32_PhysicalMemory').item().Capacity, 286 287 // ms: maybe null! 288 // http://msdn2.microsoft.com/en-us/library/aa394272.aspx 289 // http://snippets.dzone.com/posts/show/5472 290 Uptime : (WMI_data('Win32_PerfRawData_PerfOS_System.Timestamp_Object') 291 - WMI_data('Win32_PerfRawData_PerfOS_System.SystemUpTime')) * 1e3 292 / WMI_data('Win32_PerfRawData_PerfOS_System.Frequency_Object'), 293 // 顯示系統當下時間之印記 (NOT Uptime!) 這個運行時間是從性能計數器中獲得的64位整型數,不會出現在49.7天後溢出的情況。 294 // http://www.dx21.com/SCRIPTING/WMI/SUBCLASS.ASP?CID=201 295 // maybe NaN 296 Timestamp : WMI_data('Win32_PerfRawData_PerfOS_System.Timestamp_Sys100NS') 297 / WMI_data('Win32_PerfRawData_PerfOS_System.Frequency_Sys100NS') 298 }; 299 //alert(WMI_data('Win32_PerfRawData_PerfOS_System.Timestamp_Sys100NS')+'/'+WMI_data('Win32_PerfRawData_PerfOS_System.Frequency_Sys100NS')); 300 301 if (!r.Uptime) 302 r.Uptime = (new Date() - r.LastBootUpTime); 303 304 return r; 305 }; 306 307 308 /* http://support.microsoft.com/kb/328874/zh-tw 309 http://msdn.microsoft.com/en-us/library/aa394520(VS.85).aspx 310 http://msdn.microsoft.com/en-us/library/aa390456(VS.85).aspx http://school.21tx.com/2004/06/16/11568_4.html 311 If this method succeeds and the ActivationRequired property is 1 (one), the method returns 0 (zero). Otherwise, the method returns one of the WMI error constants. 312 313 TODO: 314 判別 OS 315 */ 316 getWinID[generateCode.dLK]='WMI_data'; 317 function getWinID(pKey){ 318 var o=WMI_data('Win32_WindowsProductActivation') 319 ,WshShell=WScript.CreateObject("WScript.Shell"); 320 if(!o){alert('getWinID: Can not get Win32_WindowsProductActivation!');return;} 321 o=o.item(); 322 if(o.ActivationRequired){ 323 // 未啟用 Windows 前, 用錯誤序號會出錯 324 alert('Activation Required.'); 325 return; 326 } 327 if(pKey)try{ 328 // SetProductKey: 修改產品金鑰CD-KEY序號, return 0:OK, else error 329 var e=o.SetProductKey(pKey.replace(/[\s\-]/g,'')); 330 if(e)throw e; 331 }catch(e){ 332 alert('Update failed for ['+pKey+']:\n'+e.description); // for old version 有可能:無效的操作, 此時需 delete OOBETimer registry value 333 // TODO: delete OOBETimer registry value for XP 2600: 針對非 Windows XP SP1 或較新版 Windows XP 使用,來停用 Windows。 334 //WshShell.RegDelete("HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WPAEvents\\OOBETimer"); 335 } 336 return o.GetInstallationID(pKey);//||pKey; // 無法以此方法獲得 ID 337 } 338 339 // ksp: 340 //alert(getWinID('Q9FDY-483HM-FV6RQ-2YQQQ-FD7J8'));WScript.Quit(); 341 342 // NTSU 343 //alert(getWinID('VWPM3-MH7H6-VDDHG-YVR4Y-W38JQ'));WScript.Quit(); 344 //alert(getWinID()); 345 346 //alert(getSysInfo().Caption) 347 //WScript.Quit(); 348 349 /* 350 http://163.19.54.70/student/SerialNumber.txt 大量授權 351 Windows XP Professional VWPM3-MH7H6-VDDHG-YVR4Y-W38JQ 352 Windows XP Prof, x64 Ed. FG2Q3-QX4JG-FQMMB-8XXD6-34MRY 353 Office XP Applications MXCVH-R3QQG-DMQ2M-KXPVQ-VKD6W 354 Office XP Suites PCCKW-J8Y6T-P632P-9KW9P-PK88B 355 Office 2003 Applications TF6RQ-TVG9Q-FVV74-GR4CP-2C2MB 356 Office 2003 Suites WCMVH-XJGPJ-G9BKC-2KHY9-Y7V36 357 Office 2007 Applications FJXGQ-RDQRY-Q2784-D89BP-M4MYJ 358 Office 2007 Suites KX3T3-RYFP7-BMPKG-JXTQ2-9HWBJ 359 360 DBXYD-TF477-46YM4-W74MH-6YDQ8 (CD) 361 W2JJW-4KYDP-2YMKW-FX36H-QYVD8 (FILES) 362 363 'Microsoft Windows XP Professional 5.1.2600':'VWPM3-MH7H6-VDDHG-YVR4Y-W38JQ' 364 365 ksp: 366 Windows XP Professional Q9FDY-483HM-FV6RQ-2YQQQ-FD7J8 367 Windows XP Prof, x64 Ed. V3PP8-CD446-62H9J-3XHVF-K44F3 368 Windows Vista 的 KMS 認證方式,請參考 http://www.ks.edu.tw/KSnet_service.html#D 369 Office XP Suites F86BJ-8PJWY-4P8QX-89FKF-896DT 370 Office 2003 Suites F4RMR-DKBX3-2TV7F-9T8QJ-8MYQ6 371 Office 2007 Suites M3JH3-4R8XX-R37F2-8D8H8-CBVD8 372 373 高雄市? 374 Office 2007 375 W3GCD-YWK98-8F6BG-2CYBY-KVWBJ 376 377 378 以下序號皆為 VLK 大量授權序號: 379 HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT 380 MRX3F-47B9T-2487J-KWKMF-RPWBY 381 QC986-27D34-6M3TY-JJXP9-TBGMD 382 CM3HY-26VYW-6JRYC-X66GX-JVY2D 383 DP7CM-PD6MC-6BKXT-M8JJ6-RPXGJ 384 F4297-RCWJP-P482C-YY23Y-XH8W3 385 HH7VV-6P3G9-82TWK-QKJJ3-MXR96 386 387 388 389 Windows XP Home Edition 390 x: 391 BQFBV-9J43J-663WJ-T2VDY-X86HY 392 VTDBB-QVPCJ-33J2V-B9KV4-W2PBM 393 DJH7R-4CYKJ-GWYDC-7MXHJ-X9VJY 394 3GT36-XXFDW-JC676-P4FBF-2G6MJ 395 DGDGK-XVXWR-XJHYK-3688K-8HXYJ 396 CX7DD-4GX4Y-BTTR4-H88Y7-GQPWQ 397 J22CH-K4V7X-4G6H6-66JFG-737TK 398 CG3BH-RG63P-6H2MR-3DVPT-6WTXJ 399 JPDR8-7X4G9-Q226K-B7VYR-HFHMD 400 W888Y-WM6YJ-DJQ27-WRB88-7FG96 401 402 */ 403 404 405 /* 406 Win32_ComputerSystem: 407 http://msdn2.microsoft.com/en-us/library/aa394224.aspx 408 409 Win32_NetworkAdapterConfiguration: 410 http://msdn2.microsoft.com/en-us/library/aa394217.aspx 411 http://www.microsoft.com/china/technet/community/scriptcenter/topics/networking/01_atnc_intro.mspx 412 http://www.codeproject.com/vbscript/ipaddress.asp?df=100&forumid=3295&exp=0&select=123580 413 414 415 test: 416 with(get_net_info())alert(UserName+'\n'+Name+'\n'+Workgroup+'\n'+Domain+'\n'+BootupState); 417 418 with(get_net_info(2)){ 419 alert(UserName+'\n'+Name+'\n'+Domain+'\n'+BootupState+'\nAll '+netif.length+' interfaces get'); 420 for(i=0;i<netif.length;i++)with(netif[i]) 421 sl(Caption+'\n' 422 +DNSDomain+'\n' 423 +DHCPServer+'\n' 424 +DNSHostName+'\n' 425 +DNSServerSearchOrder+'\n' 426 +IPSubnet+'\n' 427 +DefaultIPGateway+'\n' 428 +IPAddress+'\n' 429 430 +IPEnabled+'\n' 431 +DHCPEnabled+'\n' 432 +SettingID+'\n' 433 434 +MACAddress 435 ); 436 } 437 WScript.Quit(); 438 439 */ 440 CeL.OS.WMI 441 . 442 /** 443 * 取得網卡設定的IP地址 444 * @param type default type: ip setted interfaces only, 1: all interfaces, 2: 實體 net interfaces(網路卡,無線) 445 * @returns 446 * @example 447 * IP=get_net_info().netif[0].IPAddress[0]; 448 * with(get_net_info())alert(UserName+'\n'+Name+'\n'+Workgroup+'\n'+Domain+'\n'+BootupState); 449 * @requires WMI_data,VBA_to_JSA 450 * @memberOf CeL.OS.WMI 451 */ 452 get_net_info = function(type) { 453 var r = WMI_data('Win32_ComputerSystem'); 454 if (!r || !r.item()) { 455 r = null; 456 throw new Error('Can not get Win32_ComputerSystem!\nIs this old system or the function is limited?'); 457 r = {}; 458 } else { 459 r = 460 // WMI_data({computer:IP||'.',from:'Win32_ComputerSystem'}).item() 461 WMI_data.getProperties(r.item()); 462 if (!r.Workgroup) 463 // Windows 2000 and Windows NT: Workgroup is not available. Domain: If the computer is not part of a domain, then the name of the workgroup is returned. 464 r.Workgroup = r.Domain; 465 } 466 467 /* waste time 468 with(WMI_data('Win32_NTDomain').item()){ 469 r.Caption=Caption,r.Description=Description; 470 if(!r.Name)r.Name=Name; 471 } 472 */ 473 474 r.netif = []; 475 WMI_data( 476 { 477 from : 'Win32_NetworkAdapterConfiguration', 478 where : type === 1 ? '' 479 // 這判別法不是很好 480 // DHCPEnabled 與 IPEnabled 可以同時為 TRUE 481 : type === 2 ? 'MACAddress!=NULL AND (DHCPEnabled=TRUE OR IPEnabled=TRUE)'// OR IPXEnabled=TRUE 482 : 'IPEnabled=TRUE' // 'NetEnabled=True': Vista only code? 483 }, function(o) { 484 // 在DHCP可能得到兩筆同IP之data. 485 // MACAddress: getmac.exe, arp -a, nbtstat -a 192.168.0.1 486 r.netif.push(WMI_data.getProperties(o)); 487 }); 488 return r; 489 }; 490 491 492 493 CeL.OS.WMI 494 . 495 /** 496 * get CIDR data 497 * @param {Number} CIDR CIDR mask bits, 0~32 498 * @param {String} IP IPv4, e.g., 1.2.3.4 499 * @return CIDR data 500 * @since 2010/4/21 22:56:16 501 * @memberOf CeL.OS.WMI 502 */ 503 CIDR_to_IP = function (CIDR, IP) { 504 if (isNaN(CIDR) || CIDR < 0 || CIDR > 32) 505 return; 506 507 if (typeof IP === 'string') 508 IP = IP.split('.'); 509 else if (!(IP instanceof Array)) 510 IP = []; 511 512 var i = 0, r = { 513 // geteway IP 514 geteway : [], 515 // subnet mask 516 mask : [], 517 // wildcard mask 518 wildcard : [], 519 // subnet start IP,the entire network 520 subnet : [], 521 // subnet end IP, broadcast address 522 broadcast : [], 523 // Maximum Addresses, range IP count 524 // .count now = Maximum Subnets 525 count : 1 << (32 - CIDR) 526 }; 527 528 for (; i < 4; i++) { 529 if (CIDR > 7) { 530 CIDR -= 8; 531 r.wildcard[i] = 0; 532 r.mask[i] = 255; 533 r.subnet[i] = r.broadcast[i] = IP[i] || 0; 534 } else if (CIDR) { 535 r.broadcast[i] = (IP[i] || 0) | (r.wildcard[i] = CIDR = (1 << (8 - CIDR)) - 1); 536 r.subnet[i] = (IP[i] || 0) & (r.mask[i] = 255 - CIDR); 537 CIDR = 0; 538 } else 539 r.broadcast[i] = r.wildcard[i] = 255, 540 r.subnet[i] = r.mask[i] = 0; 541 } 542 543 if (r.count > 2) 544 r.count -= 2; 545 r.geteway = r.broadcast.join(',').split(','); 546 // [the entire network, .., geteway, broadcast address] 547 r.geteway[3] -= 1; 548 549 //alert(r.geteway + '\n' + r.subnet + '\n' + r.broadcast + '\n' + r.wildcard + '\n' + r.subnet + '\n' + r.count); 550 return r; 551 }; 552 553 554 CeL.OS.WMI 555 . 556 /** 557 * 改變網卡的IP地址: change IP, set IP 558 * @param to_s IP or {IP:''||[], CIDR:24||.CIDR_notation, Subnet:''||[], DNS:''||[], Gateway:254||[], GatewayOrder:''||[]} 559 * @param from IP or netif No. 560 * @since 561 * 2009/5/7 0:24:5 加強 562 * 2010/3/3 10:41:17 a work version 563 * @see 564 * <a href="http://msdn.microsoft.com/en-us/library/aa394217%28VS.85%29.aspx" accessdate="2010/3/3 13:15">Win32_NetworkAdapterConfiguration Class (Windows)</a> 565 * <a href="http://www.yongfa365.com/item/Use-WMi-Change-IP-VBS-yongfa365.html" accessdate="2010/3/3 13:14">通过 WMI 改变网卡的IP地址 ChangeIP.vbs - 柳永法(yongfa365)'Blog</a> 566 * <a href="http://www.microsoft.com/technet/scriptcenter/topics/networking/01_atnc_intro.mspx">Automating TCP/IP Networking on Clients: Part 1: Introduction</a> 567 * <a href="http://www.dotblogs.com.tw/PowerHammer/archive/2008/03/24/2060.aspx" accessdate="2010/3/3 13:15">使用 WMI 更改IP、子網路遮罩、閘道、DNS - 強力鎯頭 VB BLOG - 點部落</a> 568 * Using NetSh.exe (no reboot required): <a href="http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WinBatch/How~To+Change~Ip~Address.txt" accessdate="2010/3/3 13:12">WWW Tech Support/WinBatch/How To\Change Ip Address.txt</a> 569 * @example 570 * set_net_info({IP:'163.16.20.212',Gateway:254}); 571 * sl(set_net_info({IP:'163.16.20.30',Gateway:254}));WScript.Quit(); 572 * @requires WMI_data,VBA_to_JSA,JSArrayToSafeArray,CIDR_to_IP 573 * @memberOf CeL.OS.WMI 574 */ 575 set_net_info = function (to_s, from) { 576 577 var _f = set_net_info, r, count, IPA, i = function(ip) { 578 if (!(ip instanceof Array)) 579 if (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(ip = '' + ip)) 580 ip = [ ip ]; 581 else 582 return; 583 return JSArrayToSafeArray(ip); 584 }; 585 586 if (typeof to_s === 'string' 587 && (r = to_s 588 .match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(\/(\d{1,2}))?$/))) { 589 count = r[1]; 590 to_s = { 591 IP : count 592 }; 593 594 if ((r = r[3]) > 15) { 595 r = _.CIDR_to_IP(r, count); 596 to_s.Gateway = r.geteway.join('.'); 597 to_s.Subnet = r.mask.join('.'); 598 } 599 600 }else if (typeof to_s !== 'object' || to_s instanceof Array) 601 // treat as IP 602 to_s = { 603 IP : to_s 604 }; 605 606 if (!isNaN(to_s.Gateway)) 607 to_s.Gateway = (to_s.IP instanceof Array ? to_s.IP.join('.') : to_s.IP) 608 .replace(/\d+$/, to_s.Gateway); 609 610 // SubnetMask: Subnet masks that complement the values in the IPAddress parameter. Example: 255.255.0.0. 611 if (!('Subnet' in to_s) || !isNaN(to_s.Subnet)) { 612 r = _.CIDR_to_IP(to_s.Subnet || _f.CIDR_notation, to_s.IP); 613 to_s.Subnet = r.subnet.join('.'); 614 } 615 616 //sl('set_net_info:\n[' + from + '] → [' + to_s.IP + '/' + to_s.Subnet + ']\nGateway: [' + to_s.Gateway + ']\nDNS: [' + ('DNS' in to_s ? to_s.DNS : _f.default_DNS) + ']'); 617 // return -1; 618 619 to_s.Subnet = i(to_s.Subnet); 620 to_s.IP = i(to_s.IP); 621 to_s.DNS = i('DNS' in to_s ? to_s.DNS : _f.default_DNS); 622 623 if ((to_s.Gateway = i(to_s.Gateway))) 624 if (!to_s.GatewayOrder) 625 for (i = 1, to_s.GatewayOrder = [ 0 ], r = to_s.Gateway instanceof Array ? to_s.Gateway.length 626 : 0; i < r;) 627 to_s.GatewayOrder.push(++i); 628 else if (!(to_s.GatewayOrder instanceof Array)) 629 to_s.GatewayOrder = [ to_s.GatewayOrder ]; 630 631 r = -1; 632 count = 0; 633 if (!from) 634 from = 0; 635 636 WMI_data( 637 { 638 from : 'Win32_NetworkAdapterConfiguration', 639 // 這判別法不是很好 640 // DHCPEnabled 與 IPEnabled 可以同時為 TRUE 641 where : 'MACAddress!=NULL AND (IPEnabled=TRUE OR DHCPEnabled=TRUE)'// OR IPXEnabled=TRUE 642 }, 643 function(o) { 644 // alert('Get if: ' + o.Caption + '\n' + from + ',' + count); 645 // 通常我們不會設定無線連線 646 if(/wireless/i.test(o.Caption)) 647 return; 648 649 if (isNaN(from) || from === count++) { 650 for (i = 0, IPA = from ? VBA_to_JSA(o.IPAddress) : [ 1 ]; i < IPA.length; i++) { 651 if (!from || IPA[i] === from) { 652 r = typeof to_s.IP === 'undefined' ? o.EnableDHCP() 653 : o 654 .EnableStatic( 655 to_s.IP, 656 typeof to_s.Subnet === 'undefined' ? o.IPSubnet 657 : to_s.Subnet) 658 || typeof to_s.Gateway !== 'undefined' 659 && o.SetGateways(to_s.Gateway, 660 to_s.GatewayOrder) 661 || typeof to_s.DNS !== 'undefined' 662 && o.SetDNSServerSearchOrder(to_s.DNS); 663 //alert('Set if:\n'+o.Caption+'\nto: '+to_s.IP+'\nerrno: '+r); 664 // TODO: error detection 665 return 1; 666 } 667 } 668 } 669 }); 670 671 // not found / error 672 // http://msdn.microsoft.com/en-us/library/aa390383%28VS.85%29.aspx 673 return r; 674 }; 675 676 CeL.OS.WMI 677 . 678 // default DNS 679 // 168.95.1.1,8.8.4.4 680 set_net_info.default_DNS = '8.8.8.8'; 681 682 CeL.OS.WMI 683 . 684 // http://en.wikipedia.org/wiki/CIDR_notation 685 set_net_info.CIDR_notation = 24; 686 687 688 689 690 691 /* get IP of Windows Host 692 http://www.scriptinganswers.com/forum/forum_posts.asp?TID=516&PID=3124 693 Wscript.Network 694 695 ping: 696 http://blog.blueshop.com.tw/hammerchou/archive/2006/07/08/32205.aspx 697 1. 698 GetObject("winmgmts:").Get("NetDiagnostics=@").Ping(strAddr, Ping) 699 2. 700 objCls = GetObject("winmgmts:\\" & strMachine & "\root\CIMV2").Get("NetDiagnostics") 701 objInPara = objCls.Methods_("Ping").inParameters.SpawnInstance_() 702 objInPara.Properties_("sInAddr") = "www.google.com.tw" // 設定 Ping 的位置 703 // Ping 為 方法 , ExecMethod 為 執行方法 ( 把參數送入執行 ) 704 objOutPara = objWMIsvc.ExecMethod("NetDiagnostics=@", "Ping", objInPara) 705 // 取回輸出參數 ( Ping 的結果 ): objOutPara.ReturnValue = True 則 Ping 成功 , 反之則失敗 706 objOutPara.sOutArg 707 708 709 test: 710 var h='Public',ip=getIPofHost(h);alert(ip?h+':\n'+ip:'Computer [\\'+h+'] is unreachable!'); 711 712 */ 713 //getIPofHost[generateCode.dLK]='WMI_data'; 714 function getIPofHost(h) { 715 var qIP = WMI_data( { 716 from : 'Win32_PingStatus', 717 where : "Address='" + h + "'" 718 }).item(); 719 if (!qIP.StatusCode && qIP.StatusCode != null) 720 return qIP.ProtocolAddress; 721 } 722 723 // 終止進程 http://msdn2.microsoft.com/en-us/library/aa393907.aspx 724 //killProcess[generateCode.dLK]='WMI_data'; 725 function killProcess(n, isPID) { 726 var k = 0; 727 if (typeof isPID == 'undefined') 728 isPID = !isNaN(n); 729 WMI_data('Win32_Process', function(p) { 730 with (p) 731 if (isPID) 732 if (ProcessId == n) { 733 Terminate(); 734 k = 1; 735 return 1; 736 } else if (Caption == n) 737 Terminate(), k++; 738 }); 739 return k; 740 } 741 742 743 /* 列舉進程 http://msdn2.microsoft.com/en-us/library/aa394372.aspx 744 745 test: 746 alert(get_process()['explorer.exe'].CommandLine); 747 for(i=0,p=get_process();i<p.length;i++)with(p[i]) 748 alert(i+' / '+p.length+'\n['+ProcessId+'] '+Caption+(Name==Caption?'':' ('+Name+')')+'\n'+(Description==Caption?'':Description+'\n')+CSName+'\n' 749 +'Open files: '+HandleCount+'\n' 750 //+OSName+'\n' 751 +'memory: '+MinimumWorkingSetSize+'-'+MaximumWorkingSetSize+'\n' // memory pages visible to the process in physical RAM 752 +'Time in kernel mode: '+KernelModeTime+' ms\n'+ExecutablePath+'\n'+CommandLine+'\n'+CreationDate.toLocaleString() 753 ); 754 */ 755 //get_process[generateCode.dLK]='WMI_data'; 756 function get_process() { 757 var r = []; 758 WMI_data('Win32_Process', function(p) { 759 with (p) 760 r[Caption] = r[r.push( { 761 ProcessId : ProcessId, 762 Caption : Caption, 763 ExecutablePath : ExecutablePath, 764 CommandLine : CommandLine, 765 Name : Name, // ==Caption 766 Description : Description, // ==Caption 767 CSName : CSName, 768 HandleCount : HandleCount, 769 OSName : OSName, 770 MinimumWorkingSetSize : MinimumWorkingSetSize, 771 MaximumWorkingSetSize : MaximumWorkingSetSize, 772 KernelModeTime : p.KernelModeTime / 1e5, // 100000ms 773 CreationDate : WMI_data 774 .DateStringToDate(CreationDate) 775 }) - 1]; 776 }); 777 return r; 778 } 779 780 781 782 /* 列舉服務 783 http://msdn2.microsoft.com/en-us/library/aa394418.aspx 784 http://www.microsoft.com/taiwan/technet/scriptcenter/topics/vista/indexer.mspx 785 786 test: 787 alert(get_service()['Event Log'].Description); 788 for(i=0,s=get_service();i<s.length;i++){t=i+' / '+s.length;for(j in s[i])t+='\n'+j+': '+s[i][j];alert(t);} 789 */ 790 //get_service[generateCode.dLK]='WMI_data'; 791 function get_service() { 792 var r = []; 793 WMI_data('Win32_Service', function(s) { 794 with (s) 795 r[Caption] = r[r.push( { 796 AcceptPause : AcceptPause, 797 AcceptStop : AcceptStop, 798 Caption : Caption, 799 Description : Description, 800 DisplayName : DisplayName, 801 ExitCode : ExitCode, 802 InstallDate : WMI_data.DateStringToDate(InstallDate), 803 Name : Name, 804 Pathname : Pathname, 805 ProcessId : ProcessId, 806 ServiceSpecificExitCode : ServiceSpecificExitCode, 807 Started : Started, 808 StartMode : StartMode, 809 StartName : StartName, 810 State : State, 811 Status : Status, 812 SystemName : SystemName 813 }) - 1]; 814 }); 815 return r; 816 } 817 818 819 /* http://msdn.microsoft.com/en-us/library/bb774148.aspx 820 WinShell.ShellExecute(appName, appArgs, appPath, "", 0); http://msdn.microsoft.com/en-us/library/bb774148.aspx 821 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 822 <object runat="server" id="WinShell" scope="page" classid="clsid:13709620-C279-11CE-A49E-444553540000"></object> 823 <object runat="server" id="fso" scope="page" classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object> 824 825 http://windowssdk.msdn.microsoft.com/en-us/library/ms630425.aspx 826 WinShell.ShutdownWindows(); // Open the Shutdown dialog http://www.robvanderwoude.com/index.html 827 */ 828 829 830 /* 2008/8/8 18:29:44 831 run them with administrator rights runs under administrator privileges. 832 帳戶控制 Windows Vista:使用軟體限制原則對抗未授權的軟體 http://www.microsoft.com/taiwan/technet/windowsvista/security/rstrplcy.mspx 833 http://4sysops.com/archives/vista%E2%80%99s-uac-how-to-elevate-scripts-vbscript-and-jscript/ 834 http://blogs.msdn.com/aaron_margosis/archive/2007/07/01/scripting-elevation-on-vista.aspx 835 Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA c:\windows\system32\control.exe /name Microsoft.UserAccounts http://www.dashken.net/index.php?/archives/280-VBScript-Check-if-OS-is-Vista-and-Vistas-UAC-status.html 836 http://msdn.microsoft.com/en-us/magazine/cc163486.aspx 837 HKEY_LOCAL_MACHINESOFTWARE MicrosoftWindowsCurrentVersionPoliciesSystem\ConsentPromptBehaviorAdmin http://hsu.easynow.com.tw/index.php?load=read&id=28 838 http://vistavitals.blogspot.com/2008/02/logon-scripts-token-effort.html 839 runas http://www.merawindows.com/Forums/tabid/324/forumid/82/postid/32458/scope/posts/Default.aspx 840 http://www.winhelponline.com/articles/185/1/VBScripts-and-UAC-elevation.html 841 842 http://forums.techarena.in/vista-security/654643.htm 843 Set objShell = CreateObject("Shell.Application") 844 Set objFolder = objShell.Namespace("C:\") 845 Set objFolderItem = objFolder.ParseName("myhta.hta") 846 objFolderItem.InvokeVerb "runas" 847 848 var WinShell=new ActiveXObject("Shell.Application"),p=location.pathname.replace(/[^\\]+$/,''),o=WinShell.Namespace(p).ParseName(location.pathname.slice(p.length)); 849 o.InvokeVerb("runas"); 850 851 http://www.zaoxue.com/article/tech-28339_2.htm http://www.lob.cn/vbs/20071126203237.shtml 852 853 TODO: 854 對 prompt 回應不允許時的處理: 若想在受限的情況下使用? 855 不使用自訂程式 http://msdn.microsoft.com/en-us/library/bb776820(VS.85).aspx 856 */ 857 function runas(p){ 858 if(!p)p=typeof WScript=='object'?WScript.ScriptFullName:unescape(location.pathname); 859 var a={js:'wscript.exe',vbs:'wscript.exe',hta:'mshta.exe'},ext=p.match(/([^.]+)$/); 860 a=ext&&((ext=ext[1].toLowerCase()) in a)?a[ext]:''; 861 // 判斷是否有權限 862 if(!registryF.checkAccess('HKLM\\SOFTWARE\\')){ 863 // 以管理者權限另外執行新的 It will get the UAC prompt if this feature is not disabled. 864 new ActiveXObject("Shell.Application").ShellExecute(a||p,a?p:'','','runas'/*,5*/); 865 // 執行完本身則退出 866 if(typeof WScript=='object')WScript.Quit();else if(typeof window=='object')window.close(); 867 } 868 } 869 870 871 /* JScript file: check owner, .exe file 872 http://www.microsoft.com/taiwan/technet/scriptcenter/resources/qanda/nov04/hey1115.mspx 873 Exec Method (Windows Script Host) http://msdn.microsoft.com/en-us/library/ateytk4a(VS.85).aspx 874 875 usage: 876 runProg(path): use WshShell.Exec, return [StdOut, StdErr, ExitCode] 877 runProg(path, 1): use WshShell.Exec, can get output by .StdOut.ReadAll(), or .StdErr.ReadAll() 878 runProg([path, WindowStyle, WaitonReturn],2): use WshShell.Run 879 runProg(script path, remote computer): use WshRemote 880 runProg(path, remote computer): use WMI 881 882 TODO: 883 runProg([path, Verb],3): use Shell.Application InvokeVerb 884 runProg([path, arg1, arg2,..]): use Shell.Application.ShellExecute 885 886 887 example: 888 WScript.Echo(runProg('%COMSPEC% /U /c ""C:\\Program Files\\WinRAR\\Rar.exe" vt -scuc "F:\\CLAMP 01.rar""')[0]); 889 890 891 WshShell.Run(command, [WindowStyle 0-10], [WaitonReturn false: nowait & return 0, true: wait & return error code]) 892 WshShell.Exec(),objFolderItem.InvokeVerb() 893 WshShell.Run('command /k ' + ドライブ +' | cd /D '+ パス);// cd で他ドライブへ移れないので。 894 */ 895 //runProg[generateCode.dLK]='initWScriptObj'; 896 function runProg(p,r){try{ 897 var s; 898 if(!r||r===1||r===2)if(typeof (s=new ActiveXObject('WScript.Shell'))=='object'){ 899 if(typeof p=='object'&&r===2) 900 r=s.Run(p[0],p[1],p[2]); 901 else if(s=s.Exec(p),r)r=s; 902 else with(s){ 903 while(!Status)WScript.Sleep(80); 904 r=[StdOut.ReadAll(),StdErr.ReadAll(),ExitCode]; 905 } 906 return r; 907 }else return; 908 909 if(/^[^ ]+\.(j|vb)s$/i.test(p)){ 910 s=(WScript.CreateObject('WSHController')).CreateScript(p,r); 911 s.Execute(); 912 return s; 913 } 914 915 s=GetObject("winmgmts:{impersonationLevel=impersonate}//"+(r||'.')+"/root/cimv2:Win32_Process"); 916 //if(/^[^ ]+\.(j|vb)s$/i.test(p))p="wscript.exe "+p; 917 return s.Create(p/*,null,null,intProcessID*/); // Create 方法會讓這個指令碼在「遠端電腦」上執行。 918 }catch(e){ 919 //popErr(e); 920 return e; 921 }} // function runProg 922 923 924 925 /* shutdown/reboot computer 2007/5/8-9 0:8:52 926 http://www.robvanderwoude.com/index.html 927 http://www.ericphelps.com/batch/samples/reboot.txt 928 929 http://www.semcase.com/docus/iis/prog_wmi_tut_03_01.htm http://www.semcase.com/docus/iis/iis.htm 930 http://support.microsoft.com/kb/913538 當您使用會讓列舉程式物件在 Microsoft Windows Server 2003 或 Microsoft Windows XP 用戶端電腦上進行內部複製的 Windows Management Instrumentation (WMI) 功能時,列舉程式物件於用戶端電腦尚未完成使用列舉程式物件的動作時,即遭取消。此外,WMI 功能還可能傳回錯誤碼。 931 932 mode: 933 0 poweroff (if supported by the hardware) 934 null,1 reboot 935 restart 936 logoff 937 shutdown 938 suspend, sleep, hibernate 939 lock 940 // standby http://www.tutorials-xe.com/SCRIPTING/Restart-service/ 941 16 force 942 943 open the shutdown dialog 944 945 time: seconds 946 */ 947 var shutdownF; 948 setObjValue('shutdownF','poweroff,reboot,restart,logoff,shutdown,suspend,lock,force=16,dialog=32',1); 949 shutdown[generateCode.dLK]='initWScriptObj,shutdownF,Sleep'; 950 function shutdown(mode,time/*,message*/){ 951 if(isNaN(mode))mode=shutdownF.reboot; 952 953 var f,sComputer="." 954 ,_s,s=function(t){ 955 if(t)return _s; 956 if(time&&!_s)Sleep(time); 957 _s=1; 958 } 959 ,force=mode&shutdownF.force 960 ,sF=function(a){f={};for(i=0;i<a.length;i+=2)f[a[i]]=a[i+1];} 961 ,oWMIS 962 ; 963 964 if((mode-=force)==shutdownF.dialog)try{ 965 s(); 966 WinShell.ShutdownWindows(); 967 return; 968 }catch(e){} 969 970 // way 1: WMI 971 sF([0,0,shutdownF.logoff,0,shutdownF.shutdown,1,shutdownF.reboot,2,shutdownF.force,4,shutdownF.poweroff,8]); 972 if(mode in f)try{ // f.hasOwnProperty(mode) 973 f=f[mode]&f[force]; 974 oWMIS=new Enumerator( 975 GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}//"+(sComputer||'.')+"/root/cimv2") 976 .ExecQuery("Select * from Win32_OperatingSystem")//Select * from Win32_OperatingSystem Where primary=true 977 ); 978 if(!oWMIS)throw 1; 979 s(); 980 for(;!oWMIS.atEnd();oWMIS.moveNext()){ 981 //oWMIS.item().Reboot();//.Shutdown(); // force! 982 oWMIS.item().Win32Shutdown(f);//if() // http://msdn2.microsoft.com/en-us/library/aa394058.aspx 983 } 984 return; 985 }catch(e){} 986 // way 2: RUNDLL32 SHELL32.DLL, SHExitWindowsEx [n] 987 if(mode in f)try{WshShell.Run(" RUNDLL32 SHELL32.DLL,SHExitWindowsEx "+f[mode]);return;}catch(e){} 988 989 // way 3: shutdown.exe utility 990 sF([shutdownF.logoff,'l',shutdownF.poweroff,'s',shutdownF.shutdown,'s',shutdownF.reboot,'r',shutdownF.dialog,'i']); 991 if(mode in f)try{WshShell.Run('%windir%\System32\shutdown.exe -'+f+(!time||s(1)?'':' -t '+time)+(force?' -f':''));return;}catch(e){} // -s or -r 992 993 // way 4: rundll.exe 994 sF([shutdownF.logoff,'SHELL.DLL,RestartDialog',shutdownF.poweroff,'USER.EXE,ExitWindows',shutdownF.shutdown,'USER.EXE,ExitWindows'/*'USER.EXE,#7'||'USER.EXE, #7'||'USER.EXE,#7 0'*/,shutdownF.restart,'USER.EXE,ExitWindowsExec'/*'USER.EXE,#246'*/]); 995 if(mode in f)try{WshShell.Run("rundll.exe "+f[mode]);return;}catch(e){} 996 997 // way 5: rundll32.exe 998 sF([shutdownF.poweroff,'KRNL386.EXE,exitkernel',shutdownF.shutdown,'USER.EXE,ExitWindows',shutdownF.suspend,'PowrProf.dll,SetSuspendState']); 999 if(mode in f)try{WshShell.Run("rundll32.exe "+f[mode]);return;}catch(e){} 1000 // way 6: RUNDLL32 USER32.DLL 1001 sF([shutdownF.lock,'LockWorkStation',shutdownF.logoff,'ExitWindowsEx']); 1002 if(mode in f)try{WshShell.Run("rundll32.exe user32.dll,"+f[mode]);return;}catch(e){} 1003 1004 // way 7: RUNONCE.EXE runonce.exe是微軟Run Once的包裝。它用於第三方應用程序的安裝程序。它允許安裝程序添加到啟動項中,用於再次啟動後,進行進一步配置。 1005 if(mode==shutdownF.reboot)try{WshShell.Run("RUNONCE.EXE -q");return;}catch(e){} 1006 1007 return 1; 1008 } 1009 1010 1011 // ↑WMI set ================== 1012 1013 1014 1015 1016 1017 1018 1019 return ( 1020 CeL.OS.WMI 1021 ); 1022 }; 1023 1024 //=================================================== 1025 1026 CeL.setup_module(module_name, code_for_including); 1027 1028 }; 1029