gpt4 book ai didi

node.js - 允许 powershell 控制台在 NodeJS 中显示

转载 作者:太空宇宙 更新时间:2023-11-03 23:14:52 25 4
gpt4 key购买 nike

我有一个 NodeJS (Electron) 客户端,它运行以下代码:

child = spawn("powershell.exe",['-ExecutionPolicy', 'ByPass', '-File', require("path").resolve(__dirname, '../../../../updater.ps1')]);
child.on("exit",function(){
require('electron').remote.getCurrentWindow().close();
});

此操作打开的文件是一个 powershell 文件,用于下载并解压更新。如果我手动运行此文件,我会得到 powershell 控制台,其中显示下载和解包的进度条。但是,从上面的代码运行它不会显示控制台。

如何让我的代码在运行时显示 powershell 控制台?我很难制定搜索词来找到这个问题的答案。

我尝试过的事情:

  • '-NoExit' 添加到我的第二个参数数组
  • 添加 { windowsHide: false } 参数
  • '-WindowStyle'、'Maximized'添加到第二个参数数组

我还尝试切换到 exec

exec('powershell -ExecutionPolicy Bypass -File ' + updater_path, function callback(error, stdout, stderr){
console.log(error);
});

它运行文件但仍然不显示控制台。

答案最好允许我运行未附加到 NodeJS 客户端的 powershell 文件,并且在运行时还会显示 powershell 控制台。

这是我当前的代码:

updater = spawn("powershell.exe",['-ExecutionPolicy', 'ByPass', '-File', remote.app.getAppPath() + '\\app\\files\\scripts\\' + data.type + '_updater.ps1'], { detached: true, stdio: 'ignore' });
updater.unref();

实际上什么也没做,甚至看起来根本没有运行脚本。

我使用批处理文件尝试了同样的操作,但它从未打开。

updater = spawn("cmd",[remote.app.getAppPath() + '\\app\\files\\scripts\\launch_updater.bat'], { detached: true, stdio: ['ignore', 'ignore', 'ignore'] });
updater.unref();

最佳答案

shell:truedetached:true 足以打开 PowerShell。

我为独立的 PowerShell 窗口制作了这个简单的演示:

  • 根:
    • index.js(又名您的主 js 文件)
    • powerShell.js(分离的 powershell 窗口)
    • showTime.ps1(又名您的文件)

powerShell.js中,我会发现我在defaultPowerShellArguments变量下分隔了保持PS窗口打开的参数。

Advice: I see alot of powershell at the spawn command parameter, i cannot stress this enough, add the .exe extension too when running under Windows, correct ispowershell.exe. If you happen to use just powershell and nodepad will all of a sudden pop-up echoing your script, you will have a hard time trying to figure it out.

index.js

const powerShell = require('./powerShell');

let seconds = 5;
let remaining = seconds;
let nd = new Date().getTime() + (seconds * 1000);

setInterval(() => {
remaining -= 1
let time = new Date();
console.log('Your code running at:', time.toTimeString());

if (remaining === 3) {
console.log('Opening powershell...')
powerShell([
"-File",
"./showTime.ps1"
]);
}

if (time.getTime() > nd) {
console.log('Main script will exit.');
process.exit(0);
}
}, 1000);

powerShell.js

module.exports = (spawnArguments) => {
if (typeof spawnArguments === "undefined" || !(spawnArguments instanceof Array)) {
spawnArguments = [];
}
const {spawn} = require('child_process');
let defaultPowerShellArguments = ["-ExecutionPolicy", "Bypass", "-NoExit",];
let powershell = spawn('powershell.exe', [...defaultPowerShellArguments, ...spawnArguments], {
shell: true,
detached: true,
// You can tell PowerShell to open straight to the file directory
// Then you can use the relative path of your file.
// cwd: 'ABSOLUTE_PATH_TO_A_VALID_FOLDER'
// cwd: 'C:/'
});
}

showTime.ps1

Get-Date -Format G

关于node.js - 允许 powershell 控制台在 NodeJS 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56780478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com