| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | var log = require('npmlog')  , execFile = require('child_process').execFile  , path = require('path')function findVS2017(callback) {  var ps = path.join(process.env.SystemRoot, 'System32', 'WindowsPowerShell',                     'v1.0', 'powershell.exe')  var csFile = path.join(__dirname, 'Find-VS2017.cs')  var psArgs = ['-ExecutionPolicy', 'Unrestricted', '-NoProfile',                '-Command', '&{Add-Type -Path \'' + csFile + '\';' +                '[VisualStudioConfiguration.Main]::Query()}']  log.silly('find vs2017', 'Running', ps, psArgs)  var child = execFile(ps, psArgs, { encoding: 'utf8' },           function (err, stdout, stderr) {    log.silly('find vs2017', 'PS err:', err)    log.silly('find vs2017', 'PS stdout:', stdout)    log.silly('find vs2017', 'PS stderr:', stderr)    if (err)      return callback(new Error('Could not use PowerShell to find VS2017'))    var vsSetup    try {      vsSetup = JSON.parse(stdout)    } catch (e) {      log.silly('find vs2017', e)      return callback(new Error('Could not use PowerShell to find VS2017'))    }    log.silly('find vs2017', 'vsSetup:', vsSetup)    if (vsSetup && vsSetup.log)      log.verbose('find vs2017', vsSetup.log.trimRight())    if (!vsSetup || !vsSetup.path || !vsSetup.sdk) {      return callback(new Error('No usable installation of VS2017 found'))    }    log.verbose('find vs2017', 'using installation:', vsSetup.path)    callback(null, { "path": vsSetup.path, "sdk": vsSetup.sdk })  })  child.stdin.end()}module.exports = findVS2017
 |