const wmic = require('ms-wmic'); function getCleanWmicResult(dirtyString) { if (dirtyString.indexOf('\r') > -1) { dirtyString = dirtyString.substring(dirtyString.lastIndexOf('\r') + 1); } return dirtyString; } // get hardware info, using wmic.exe function getHWInfo() { return new Promise(function (resolve, reject) { wmic.execute('nic where netenabled=true get MACAddress', function (err, stdOut) { if (err) reject(new Error("error case #1")); let macAddress = getCleanWmicResult(stdOut).split(':').join('-'); wmic.execute('cpu get processorId', function (err, stdOut) { if (err) reject(new Error("error case #2")); let cpuID = getCleanWmicResult(stdOut); resolve({ 'macAddress': macAddress, 'cpuID': cpuID }); }); }); }); } getHWInfo().then(function (data) { // data.macAddress, data.cpuID, ... }).catch(function (err) { console.error(err); });
ms-wmic 모듈을 이용하였다. ms-wmic 모듈이 윈도우의 wmic.exe를 참조하는 방식으로 동작하기 때문에 wmic.exe 위치가 PATH 환경 변수에 포함되어 있어야 한다. 아니면 wmic.exe를 노드 실행 파일과 같은 위치에 두어도 된다.
getHWInfo()가 하드웨어 정보를 추출하는 코드고, getCleanWmicResult()란 함수를 만든 이유는 ms-wmic가 반환해주는 문자열에 캐리지 리턴(carriage return)이 포함되어 있어서다. (캐리지 리턴 문자 때문에 다른 문자열과 연산했을 때 값이 깨진다.)
*