SHOW:
|
|
- or go back to the newest paste.
| 1 | @set @v=4 /* List my programs by AveYo | |
| 2 | :: includes running processes and services, installed programs, scheduled tasks and application crashing events | |
| 3 | :: 2017 March - modernizing this really old, but still useful batch script | |
| 4 | :: 2017 December - added application crashing events, scheduled tasks; listing UninstallString; filter svchost.exe; csv-like format | |
| 5 | :: 2019 July - replace quotes, use | delimiter as , appears frequently in program names and breaks csv import | |
| 6 | @echo off & setlocal disabledelayedexpansion &title List my programs by AveYo &color 0B &cls | |
| 7 | set o="%USERPROFILE%\Desktop\List_my_programs.txt" | |
| 8 | cd.>%o% | |
| 9 | if not exist %o% set o="%TEMP%\List_my_programs.txt" | |
| 10 | echo. | |
| 11 | echo Please wait while generating %o% ... | |
| 12 | echo [List_my_programs_v4.bat - http://pastebin.com/GMyD7UwK] >%o% | |
| 13 | ver >>%o% & echo \\%COMPUTERNAME% %o% %DATE% %TIME% >>%o% | |
| 14 | echo.>>%o% | |
| 15 | echo [RUNNING PROCESSES] not svchost.exe>>%o% | |
| 16 | set "c1=Name,SessionId,ParentProcessId,ProcessId,Priority,WorkingSetSize,PrivatePageCount,PageFaults,PageFileUsage" | |
| 17 | set "c2=ThreadCount,HandleCount,WriteOperationCount,ReadOperationCount,OtherOperationCount,ExecutablePath" | |
| 18 | set "NOT_SVCHOST=NOT (Name='svchost.exe' AND ExecutablePath=NULL OR ExecutablePath LIKE '%%%WINDIR:\=\\%\\system32\\svchost.exe%%')" | |
| 19 | cscript /nologo /e:JScript "%~f0" wbem_query Win32_Process "%c1%,%c2%" "WHERE %NOT_SVCHOST%">>%o% | |
| 20 | echo.>>%o% | |
| 21 | echo [RUNNING SERVICES] not svchost-based>>%o% | |
| 22 | set "c=Name,StartMode,ProcessId,PathName" | |
| 23 | set "NOT_SVCHOST_BASED=NOT PathName LIKE '%%%WINDIR:\=\\%\\system32\\svchost.exe%%'" | |
| 24 | cscript /nologo /e:JScript "%~f0" wbem_query Win32_Service "%c%" "WHERE State='Running' AND %NOT_SVCHOST_BASED%">>%o% | |
| 25 | echo.>>%o% | |
| 26 | echo [DISABLED SERVICES]>>%o% | |
| 27 | set "c=Name,StartMode,PathName" | |
| 28 | cscript /nologo /e:JScript "%~f0" wbem_query Win32_Service "%c%" "WHERE Startmode='Disabled'">>%o% | |
| 29 | echo.>>%o% | |
| 30 | echo [STARTUP PROGRAMS]>>%o% | |
| 31 | set "c=Command,Description,Caption,Name,User,SettingID,Location" | |
| 32 | cscript /nologo /e:JScript "%~f0" wbem_query Win32_StartupCommand "%c%">>%o% | |
| 33 | echo.>>%o% | |
| 34 | echo [INSTALLED PROGRAMS HKCU X64]>>%o% | |
| 35 | set "c=DisplayName,DisplayVersion,Publisher,InstallDate,UninstallString" | |
| 36 | cscript /nologo /e:JScript "%~f0" winst_query 1 "Software\Microsoft\Windows\CurrentVersion\Uninstall" "%c%" >>%o% | |
| 37 | echo.>>%o% | |
| 38 | echo [INSTALLED PROGRAMS HKCU X86]>>%o% | |
| 39 | cscript /nologo /e:JScript "%~f0" winst_query 1 "Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" "%c%" >>%o% | |
| 40 | echo.>>%o% | |
| 41 | echo [INSTALLED PROGRAMS HKLM X64]>>%o% | |
| 42 | cscript /nologo /e:JScript "%~f0" winst_query 2 "Software\Microsoft\Windows\CurrentVersion\Uninstall" "%c%" >>%o% | |
| 43 | echo.>>%o% | |
| 44 | echo [INSTALLED PROGRAMS HKLM X86]>>%o% | |
| 45 | cscript /nologo /e:JScript "%~f0" winst_query 2 "Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall" "%c%" >>%o% | |
| 46 | echo.>>%o% | |
| 47 | echo [SCHEDULED TASKS] not Microsoft\Windows>>%o% | |
| 48 | echo TaskName,NextRunTime,Status>>%o% | |
| 49 | echo --------,-----------,------>>%o% | |
| 50 | ::schtasks /query /fo csv /nh |find /i /v "\Microsoft\Windows\">>%o% | |
| 51 | schtasks /query /fo table /nh|findstr /v "^$">>%o% | |
| 52 | echo.>>%o% | |
| 53 | echo [APPLICATION CRASHING EVENTS] not Apps\Microsoft>>%o% | |
| 54 | set "c=RecordNumber,TimeGenerated,Message" | |
| 55 | set "NOT_APPS_MICROSOFT=Category=100 AND NOT Message LIKE '%%Apps\\Microsoft%%'" | |
| 56 | cscript /nologo /e:JScript "%~f0" wbem_query Win32_NTLogEvent "%c%" "WHERE Logfile='Application' AND %NOT_APPS_MICROSOFT%" >>%o% | |
| 57 | echo.>>%o% | |
| 58 | ||
| 59 | :: done! | |
| 60 | echo Done! | |
| 61 | call :reg_query notepadfont "HKCU\Software\Microsoft\Notepad" lfFaceName | |
| 62 | if exist %o% ( | |
| 63 | reg add HKCU\Software\Microsoft\Notepad /v lfFaceName /t REG_SZ /d "FixedSys" /f 1>nul 2>nul | |
| 64 | start "" notepad %o% | |
| 65 | ping -n 2 localhost >nul 2>&1 | |
| 66 | reg add HKCU\Software\Microsoft\Notepad /v lfFaceName /t REG_SZ /d "%notepadfont%" /f 1>nul 2>nul | |
| 67 | ) | |
| 68 | exit/b | |
| 69 | ||
| 70 | :reg_query [USAGE] call :reg_query ResultVar "HKCU\KeyName" "ValueName" | |
| 71 | (for /f "skip=2 delims=" %%s in ('reg query "%~2" /v "%~3" /z 2^>nul') do set ".=%%s" & call set "%~1=%%.:*) =%%") & exit/b
| |
| 72 | ||
| 73 | *//* [ JScript functions ] all lines above are ignored by starting script with a js comment */ | |
| 74 | function timer(f){var b=new Date();return{end: function(){var e=new Date(),t=e.getTime()-b.getTime();WSH.Echo('[',f,'] :',t,'ms')}}}
| |
| 75 | function padder(s,n,chr,dir){var p=Array(n+1).join(chr);return (dir<0)? p.substring(0,n - s.length) + s : s + p.slice(s.length - n)}
| |
| 76 | function table_print(fields,head){
| |
| 77 | var p = 0, f = 0, total = fields[0].length, nr = head.length; if (total<3) return 0; | |
| 78 | var pad = Array(nr), i = 0; while (i<nr) pad[i] = head[i++].length; | |
| 79 | while (f<total) {i = 0; while (i<nr) { var p = (fields[i][f]+' ').length; if (p > pad[i]) {pad[i] = p}; i++ }; f++ }
| |
| 80 | f = 0; while (f<total) {
| |
| 81 | var row='', i = 0; while (i<nr) {row += padder(fields[i][f]+'', pad[i] + 2, ' ', (i==0) ? 1 : -1); i++ }; WSH.Echo(row); f++;
| |
| 82 | } | |
| 83 | } | |
| 84 | function winst_query(rkey,skey,keys) { /*var _timer=timer(skey);*/
| |
| 85 | var winst = WSH.CreateObject('WindowsInstaller.Installer'), head=keys.split(','), nr=head.length;
| |
| 86 | var fields = Array(nr), i = 0; while (i<nr) { fields[i] = []; fields[i].push(head[i]+' | '); fields[i].push('-------- | '); i++ }
| |
| 87 | var q = function(_rkey,_skey,_keys){var o=null; try{ o=winst.RegistryValue(parseInt(_rkey), _skey, _keys) }catch(e){} return o};
| |
| 88 | var k = null, v = null, s = null, r = 0; while (r<500) {
| |
| 89 | r++; k = q(rkey, skey, -r); if (k==null) continue; i = 0; while (i<nr) {
| |
| 90 | s = q(rkey, skey+'\\'+k, head[i]); | |
| 91 | if (i==0 && s==null) { i = nr } else { fields[i].push( (s==null) ? '' : s.split('"').join("'")+' | '); i++ }
| |
| 92 | } | |
| 93 | } | |
| 94 | table_print(fields,head); /*_timer.end();*/ | |
| 95 | } | |
| 96 | function wbem_query(table,cols,clause) { /*var _timer=timer(skey);*/
| |
| 97 | var wbem = WSH.CreateObject('WbemScripting.SWbemLocator').ConnectServer('.', 'root\\cimv2'), head=cols.split(','), nr=head.length;
| |
| 98 | var fields = Array(nr), i = 0; while (i<nr) { fields[i] = []; fields[i].push(head[i]+' | '); fields[i].push('-------- | '); i++ }
| |
| 99 | var q = new Enumerator(wbem.ExecQuery('select ' + cols + ' from ' + table + ' ' + clause));
| |
| 100 | while (!q.atEnd()) {
| |
| 101 | var i = 0; while (i<nr) { var s=q.item()[ head[i] ]+'' || ''; fields[i].push( s.split('"').join("'")+' | ' ); i++ }
| |
| 102 | q.moveNext(); | |
| 103 | } | |
| 104 | table_print(fields,head); /*_timer.end();*/ | |
| 105 | } | |
| 106 | if (WSH.Arguments(0)=='winst_query') winst_query(WSH.Arguments(1),WSH.Arguments(2),WSH.Arguments(3)); | |
| 107 | if (WSH.Arguments(0)=='wbem_query') wbem_query(WSH.Arguments(1),WSH.Arguments(2),(WSH.Arguments.length>=4) ? WSH.Arguments(3) : '' ) | |
| 108 | // |