首页 > 解决方案 > 如何使用nodejs执行使每个离线磁盘在线的powershell脚本

问题描述

直接在powershell中写入以下内容,将使系统中找到的每个离线磁盘都在线

Get-Disk | Where-Object IsOffline –Eq $True | Set-Disk –IsOffline $False

但是,问题是当我尝试将其作为 onlinedisktest.ps1 的脚本时,我将收到以下错误消息。

Where-Object : A positional parameter cannot be found that accepts argument 'False'.
At C:\Users\me\Desktop\project-main\new\scripts\onlinedisktest.ps1:1 char:12
+ Get-Disk | Where-Object IsOffline –Eq $True | Set-Disk –IsOffline ...
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.WhereObjectCommand

我的代码

static async run(executable, args, opts = {}) {
        return new Promise((resolve, reject) => {
            const child = spawn(executable, args, {
                shell: true,
                stdio: ["pipe", process.stdout, process.stderr],
                ...opts,
            });
            child.on("error", reject);
            child.on("exit", (code) => {
                if (code === 0) {
                    resolve(code);
                } else {
                    const e = new Error('Process exited with error code ' + code);
                    e.code = code;
                    reject(e);
                }
            });
        });
}
      
static async exeOnlineDisk () {

        try {
            const code = await this.run('powershell', ["-executionpolicy", "unrestricted", "-file", __dirname + "\\scripts\\onlinedisktest.ps1"]);
            if (code == 0) {
                //success
            }
        } catch (e) {
            console.error(e);
            process.exit(e.code || 1);
        }
}

标签: node.jspowershell

解决方案


检查文件的编码。尝试将您调用的脚本保存为 UTF 8。

在此处输入图像描述


推荐阅读