| return nodeShellExec( "fsutil", ["dirty", "query", "C:"], { | return nodeShellExec( "fsutil", ["dirty", "query", "C:"], { | ||||
| inherit : true | inherit : true | ||||
| // , shell: true | // , shell: true | ||||
| // , stdio: 'ignore' | |||||
| , stdio: 'ignore' | |||||
| , env: process.env | , env: process.env | ||||
| , title : `check privileged execution mode using "fsutil dirty query C:"` | , title : `check privileged execution mode using "fsutil dirty query C:"` | ||||
| }).then((exitcode)=>{ | }).then((exitcode)=>{ | ||||
| } | } | ||||
| ) | ) | ||||
| .catch(()=>{ | .catch(()=>{ | ||||
| console.log('Not Elevated Requesting Elevated Privileges'); | |||||
| console.log('Requesting Elevated Privileges'); | |||||
| // Wait for the runas to complete before we read it. | // Wait for the runas to complete before we read it. | ||||
| try { | try { | ||||
| fs.unlinkSync('run.done') | fs.unlinkSync('run.done') | ||||
| // runas returned. | // runas returned. | ||||
| var runaslog = JSON.parse('[ { "success" : true, "result" : "runas Log" }' + fs.readFileSync('run.log', { flags : 'a+'}) + ']'); | var runaslog = JSON.parse('[ { "success" : true, "result" : "runas Log" }' + fs.readFileSync('run.log', { flags : 'a+'}) + ']'); | ||||
| runaslog.forEach((logEntry)=>{ | runaslog.forEach((logEntry)=>{ | ||||
| logEntry.succes ? (console.log(['success :' + logEntry.result]), console.log((logEntry.messages || []).join(' '))) : console.error(['error :' + logEntry.result]), console.error((logEntry.messages || []).join(' ')) | |||||
| logEntry.success ? (console.log(['success :' + logEntry.result]), console.log((logEntry.messages || []).join(' '))) : console.error(['error :' + logEntry.result]), console.error((logEntry.messages || []).join(' ')) | |||||
| }) | }) | ||||
| }) | }) | ||||
| .catch(err => console.error('Elevation failed : ' + err)); | .catch(err => console.error('Elevation failed : ' + err)); | ||||
| var p = new Promise(function(resolve, reject){ | var p = new Promise(function(resolve, reject){ | ||||
| if(!opts.detached) { | if(!opts.detached) { | ||||
| var messages = []; // PB : TODO -- Explore stream for Task level aggregation to prevent interleaved messages from multiple tasks... | var messages = []; // PB : TODO -- Explore stream for Task level aggregation to prevent interleaved messages from multiple tasks... | ||||
| var succes = true; | |||||
| // use child.stdout.setEncoding('utf8'); if you want text chunks | |||||
| child.stdout.setEncoding('utf8'); | |||||
| child.stderr.setEncoding('utf8'); | |||||
| child.stdout.on('data', (chunk) => { messages.push(chunk); /*console.log(chunk)*/}); | |||||
| child.on('error', (chunk) => { succes = false; messages.push(chunk); /*console.error(chunk)*/ }); | |||||
| child.stderr.on('data', (chunk) => { messages.push(chunk); /*console.log(chunk)*/}); | |||||
| // child.stderr.pipe(process.stderr); | |||||
| var success = true; | |||||
| if(opts.stdio !== 'ignore') { | |||||
| child.stdout.setEncoding('utf8'); | |||||
| child.stderr.setEncoding('utf8'); | |||||
| child.stdout.on('data', (chunk) => { messages.push(chunk); /*console.log(chunk)*/}); | |||||
| child.on('error', (chunk) => { success = false; messages.push(chunk); /*console.error(chunk)*/ }); | |||||
| child.stderr.on('data', (chunk) => { messages.push(chunk); /*console.log(chunk)*/}); | |||||
| } | |||||
| child.on('close', (code) => { | child.on('close', (code) => { | ||||
| if(code !== 0) succes = false; | |||||
| if(opts.runas){ | |||||
| fs.writeFileSync('run.log', ', ' + JSON.stringify({ result: ` ${opts.title} exited with code ${code}`, messages : messages }), {'flag':'a+'} ) | |||||
| } | |||||
| else { | |||||
| succes ? console.log(['success : ' + ` ${opts.title} exited with code ${code}`]) : console.error([`error : ${opts.title} exited with code ${code}`]) | |||||
| // console.log( messages.join('') ) | |||||
| process.stdout.write( messages.join('') ) | |||||
| if(+code !== 0) success = false; | |||||
| if(opts.stdio !== 'ignore') { | |||||
| if(opts.runas){ | |||||
| var logEntry = { result: `${opts.title} exited with code ${code}`, messages : messages } | |||||
| success ? logEntry.success = true : null; | |||||
| fs.writeFileSync('run.log', ', ' + JSON.stringify(logEntry), {'flag':'a+'} ) | |||||
| } | |||||
| else { | |||||
| success ? console.log(['success : ' + ` ${opts.title} exited with code ${code}`]) : console.error([`error : ${opts.title} exited with code ${code}`]) | |||||
| // console.log( messages.join('') ) | |||||
| process.stdout.write( messages.join('') ) | |||||
| } | |||||
| } | } | ||||
| if(code !== 0) return reject(code) | if(code !== 0) return reject(code) | ||||
| resolve(true) | resolve(true) |