in tool.ts [381:431]
export async function extract7z(file: string, dest?: string, _7zPath?: string): Promise<string> {
if (process.platform != 'win32') {
throw new Error('extract7z() not supported on current OS');
}
if (!file) {
throw new Error("parameter 'file' is required");
}
console.log(tl.loc('TOOL_LIB_ExtractingArchive'));
dest = _createExtractFolder(dest);
let originalCwd = process.cwd();
try {
process.chdir(dest);
if (_7zPath) {
// extract
let _7z: trm.ToolRunner = tl.tool(_7zPath)
.arg('x') // eXtract files with full paths
.arg('-bb1') // -bb[0-3] : set output log level
.arg('-bd') // disable progress indicator
.arg('-sccUTF-8') // set charset for for console input/output
.arg(file);
await _7z.exec();
}
else {
// extract
let escapedScript = path.join(__dirname, 'Invoke-7zdec.ps1').replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines
let escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, '');
let escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, '');
let command: string = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`
let powershellPath = tl.which('powershell', true);
let powershell: trm.ToolRunner = tl.tool(powershellPath)
.line('-NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command')
.arg(command);
powershell.on('stdout', (buffer: Buffer) => {
process.stdout.write(buffer);
});
powershell.on('stderr', (buffer: Buffer) => {
process.stderr.write(buffer);
});
await powershell.exec(<trm.IExecOptions>{ silent: true });
}
}
finally {
process.chdir(originalCwd);
}
return dest;
}