diff --git a/CHANGELOG.md b/CHANGELOG.md index 817984c..4369df7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -99,6 +99,7 @@ Other changes | Version | Date | Comment | | -------------- | -------------- | -------- | +| 3.33.9 | 2017-12-14 | bugfix WMIC not found (Windows) | | 3.33.8 | 2017-12-02 | bugfix diskLayout().size (OSX) | | 3.33.7 | 2017-11-28 | bugfix diskLayout().size | | 3.33.6 | 2017-11-16 | bugfix diskLayout().size | diff --git a/lib/battery.js b/lib/battery.js index b99ebec..42c6a52 100644 --- a/lib/battery.js +++ b/lib/battery.js @@ -101,7 +101,7 @@ module.exports = function (callback) { }); } if (_windows) { - exec('WMIC Path Win32_Battery Get BatteryStatus, DesignCapacity, EstimatedChargeRemaining /value', function (error, stdout) { + exec(util.getWmic() + ' Path Win32_Battery Get BatteryStatus, DesignCapacity, EstimatedChargeRemaining /value', function (error, stdout) { if (stdout) { let lines = stdout.split('\r\n'); let status = util.getValue(lines, 'BatteryStatus', '=').trim(); diff --git a/lib/cpu.js b/lib/cpu.js index 9d44a17..651605e 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -234,7 +234,7 @@ function getCpu() { }); } if (_windows) { - exec('wmic cpu get name, description, revision, l2cachesize, l3cachesize, manufacturer, currentclockspeed, maxclockspeed /value', function (error, stdout) { + exec(util.getWmic() + ' cpu get name, description, revision, l2cachesize, l3cachesize, manufacturer, currentclockspeed, maxclockspeed /value', function (error, stdout) { if (!error) { let lines = stdout.split('\r\n'); let name = util.getValue(lines, 'name', '=') || ''; @@ -278,7 +278,7 @@ function getCpu() { } } } - exec('wmic path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) { + exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) { if (!error) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); lines.forEach(function (line) { @@ -448,7 +448,7 @@ function cpuTemperature(callback) { resolve(result); } if (_windows) { - exec('wmic /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature', function (error, stdout) { + exec(util.getWmic() + ' /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature', function (error, stdout) { if (!error) { let sum = 0; let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); @@ -595,7 +595,7 @@ function cpuCache(callback) { }); } if (_windows) { - exec('wmic cpu get l2cachesize, l3cachesize /value', function (error, stdout) { + exec(util.getWmic() + ' cpu get l2cachesize, l3cachesize /value', function (error, stdout) { if (!error) { let lines = stdout.split('\r\n'); result.l1d = 0; @@ -605,7 +605,7 @@ function cpuCache(callback) { if (result.l2) { result.l2 = parseInt(result.l2) * 1024; } if (result.l3) { result.l3 = parseInt(result.l3) * 1024; } } - exec('wmic path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) { + exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) { if (!error) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); lines.forEach(function (line) { diff --git a/lib/filesystem.js b/lib/filesystem.js index fd27a0a..2a9fe89 100644 --- a/lib/filesystem.js +++ b/lib/filesystem.js @@ -62,7 +62,7 @@ function fsSize(callback) { }); } if (_windows) { - exec('wmic logicaldisk get Caption,FileSystem,FreeSpace,Size', function (error, stdout) { + exec(util.getWmic() + ' logicaldisk get Caption,FileSystem,FreeSpace,Size', function (error, stdout) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); lines.forEach(function (line) { if (line !== '') { @@ -237,7 +237,7 @@ function blockDevices(callback) { }); } if (_windows) { - exec('wmic logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /format:csv', function (error, stdout) { + exec(util.getWmic() + ' logicaldisk get Caption,Description,DeviceID,DriveType,FileSystem,FreeSpace,Name,Size,VolumeName,VolumeSerialNumber /format:csv', function (error, stdout) { if (!error) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); lines.forEach(function (line) { @@ -698,7 +698,7 @@ function diskLayout(callback) { } if (_windows) { - exec('wmic diskdrive get /value', function (error, stdout) { + exec(util.getWmic() + ' diskdrive get /value', function (error, stdout) { if (!error) { let devices = stdout.toString().split('\r\n\r\n\r\n'); devices.forEach(function (device) { diff --git a/lib/graphics.js b/lib/graphics.js index d6527f8..959192b 100644 --- a/lib/graphics.js +++ b/lib/graphics.js @@ -323,11 +323,11 @@ function graphics(callback) { } if (_windows) { // https://blogs.technet.microsoft.com/heyscriptingguy/2013/10/03/use-powershell-to-discover-multi-monitor-information/ - exec('wmic path win32_VideoController get AdapterCompatibility, AdapterDACType, name, PNPDeviceID, CurrentVerticalResolution, CurrentHorizontalResolution, CurrentNumberOfColors, AdapterRAM, CurrentBitsPerPixel, CurrentRefreshRate, MinRefreshRate, MaxRefreshRate, VideoMemoryType /value', function (error, stdout) { + exec(util.getWmic() + ' path win32_VideoController get AdapterCompatibility, AdapterDACType, name, PNPDeviceID, CurrentVerticalResolution, CurrentHorizontalResolution, CurrentNumberOfColors, AdapterRAM, CurrentBitsPerPixel, CurrentRefreshRate, MinRefreshRate, MaxRefreshRate, VideoMemoryType /value', function (error, stdout) { if (!error) { let csections = stdout.split(/\n\s*\n/); result.controllers = parseLinesWindowsControllers(csections); - exec('wmic path win32_desktopmonitor get Caption, MonitorManufacturer, MonitorType, ScreenWidth, ScreenHeight /value', function (error, stdout) { + exec(util.getWmic() + ' path win32_desktopmonitor get Caption, MonitorManufacturer, MonitorType, ScreenWidth, ScreenHeight /value', function (error, stdout) { let dsections = stdout.split(/\n\s*\n/); if (!error) { result.displays = parseLinesWindowsDisplays(dsections); diff --git a/lib/memory.js b/lib/memory.js index 40b70ec..8d4881c 100644 --- a/lib/memory.js +++ b/lib/memory.js @@ -164,7 +164,7 @@ function mem(callback) { if (_windows) { let swaptotal = 0; let swapused = 0; - exec('wmic pagefile get AllocatedBaseSize, CurrentUsage', function (error, stdout) { + exec(util.getWmic() + ' pagefile get AllocatedBaseSize, CurrentUsage', function (error, stdout) { if (!error) { let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); lines.forEach(function (line) { @@ -293,7 +293,7 @@ function memLayout(callback) { const memoryTypes = 'Unknown|Other|DRAM|Synchronous DRAM|Cache DRAM|EDO|EDRAM|VRAM|SRAM|RAM|ROM|FLASH|EEPROM|FEPROM|EPROM|CDRAM|3DRAM|SDRAM|SGRAM|RDRAM|DDR|DDR2|DDR2 FB-DIMM|Reserved|DDR3|FBD2|DDR4|LPDDR|LPDDR2|LPDDR3|LPDDR4'.split('|'); const FormFactors = 'Unknown|Other|SIP|DIP|ZIP|SOJ|Proprietary|SIMM|DIMM|TSOP|PGA|RIMM|SODIMM|SRIMM|SMD|SSMP|QFP|TQFP|SOIC|LCC|PLCC|BGA|FPBGA|LGA'.split('|'); - exec('wmic memorychip get BankLabel, Capacity, ConfiguredClockSpeed, ConfiguredVoltage, MaxVoltage, MinVoltage, DataWidth, FormFactor, Manufacturer, MemoryType, PartNumber, SerialNumber, Speed, Tag /value', function (error, stdout) { + exec(util.getWmic() + 'wmic memorychip get BankLabel, Capacity, ConfiguredClockSpeed, ConfiguredVoltage, MaxVoltage, MinVoltage, DataWidth, FormFactor, Manufacturer, MemoryType, PartNumber, SerialNumber, Speed, Tag /value', function (error, stdout) { if (!error) { let devices = stdout.toString().split('BankL'); devices.shift(); diff --git a/lib/network.js b/lib/network.js index 5272339..ab48286 100644 --- a/lib/network.js +++ b/lib/network.js @@ -319,14 +319,14 @@ function networkStats(iface, callback) { // NICs let perfData = []; let nics = []; - cmd = 'wmic nic get MACAddress, name, NetEnabled /value'; + cmd = util.getWmic() + ' nic get MACAddress, name, NetEnabled /value'; exec(cmd, function (error, stdout) { if (!error) { const nsections = stdout.split(/\n\s*\n/); nics = parseLinesWindowsNics(nsections); // Performance Data - cmd = 'wmic path Win32_PerfRawData_Tcpip_NetworkInterface Get name,BytesReceivedPersec,BytesSentPersec,BytesTotalPersec /value'; + cmd = util.getWmic() + ' path Win32_PerfRawData_Tcpip_NetworkInterface Get name,BytesReceivedPersec,BytesSentPersec,BytesTotalPersec /value'; exec(cmd, function (error, stdout) { if (!error) { const psections = stdout.split(/\n\s*\n/); diff --git a/lib/osinfo.js b/lib/osinfo.js index b032f59..04381d0 100644 --- a/lib/osinfo.js +++ b/lib/osinfo.js @@ -14,6 +14,7 @@ const os = require('os'); const exec = require('child_process').exec; +const util = require('./util'); let _platform = os.type(); @@ -203,7 +204,7 @@ function osInfo(callback) { if (_windows) { result.logofile = getLogoFile(); result.release = result.kernel; - exec('wmic os get Caption', function (error, stdout) { + exec(util.getWmic() + ' os get Caption', function (error, stdout) { result.distro = result.codename = stdout.slice(stdout.indexOf('\r\n') + 2).trim(); if (callback) { callback(result); diff --git a/lib/processes.js b/lib/processes.js index 54901c8..87576b5 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -116,7 +116,7 @@ function services(srv, callback) { } } if (_windows) { - exec('wmic service get /value', {maxBuffer: 1024 * 1000}, function (error, stdout) { + exec(util.getWmic() + ' service get /value', {maxBuffer: 1024 * 1000}, function (error, stdout) { if (!error) { let serviceSections = stdout.split(/\n\s*\n/); for (let i = 0; i < serviceSections.length; i++) { @@ -480,7 +480,7 @@ function processes(callback) { }); } if (_windows) { - exec('wmic process get /value', {maxBuffer: 1024 * 1000}, function (error, stdout) { + exec(util.getWmic() + ' process get /value', {maxBuffer: 1024 * 1000}, function (error, stdout) { if (!error) { let processSections = stdout.split(/\n\s*\n/); let procs = []; diff --git a/lib/system.js b/lib/system.js index 43f3268..f054eb5 100644 --- a/lib/system.js +++ b/lib/system.js @@ -161,7 +161,7 @@ function system(callback) { if (_windows) { // exec('wmic csproduct get', function (error, stdout) { // ToDo: refactor /value - exec('wmic csproduct get /value', function (error, stdout) { + exec(util.getWmic() + ' csproduct get /value', function (error, stdout) { if (!error) { // let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0)[0].trim().split(/\s\s+/); let lines = stdout.split('\r\n'); @@ -222,7 +222,7 @@ function bios(callback) { } if (_windows) { // ToDo: check BIOS windows - exec('wmic bios get /value', function (error, stdout) { + exec(util.getWmic() + ' bios get /value', function (error, stdout) { if (!error) { let lines = stdout.toString().split('\r\n'); const description = util.getValue(lines, 'description', '='); @@ -308,7 +308,7 @@ function baseboard(callback) { } if (_windows) { // ToDo: check BIOS windows - exec('wmic baseboard get /value', function (error, stdout) { + exec(util.getWmic() + ' baseboard get /value', function (error, stdout) { if (!error) { let lines = stdout.toString().split('\r\n'); diff --git a/lib/util.js b/lib/util.js index 7ff364e..28f6d6a 100644 --- a/lib/util.js +++ b/lib/util.js @@ -13,7 +13,10 @@ // ---------------------------------------------------------------------------------- const os = require('os'); +const fs = require('fs'); + let _cores = 0; +let wmic = ''; function isFunction(functionToCheck) { let getType = {}; @@ -121,6 +124,15 @@ function parseDateTime(dt) { return result; } +function getWmic() { + if (os.type() === 'Windows_NT' && !wmic) { + if (fs.existsSync(process.env.WINDIR + '\\system32\\wbem\\wmic.exe')) { + wmic = process.env.WINDIR + '\\system32\\wbem\\wmic.exe'; + } else wmic = 'wmic' + } + return wmic; +} + exports.isFunction = isFunction; exports.unique = unique; exports.sortByKey= sortByKey; @@ -128,3 +140,4 @@ exports.cores = cores; exports.getValue = getValue; exports.decodeEscapeSequence = decodeEscapeSequence; exports.parseDateTime = parseDateTime; +exports.getWmic = getWmic;