Задать вопрос

Как обойти ошибку The term '=' is not recognized as the name of a cmdlet?

Пытаюсь с помощью nodejs и powershell найти количество видимых окон для процесса FastExecuteScript.exe и завершить этот процесс, в случае если таких окон больше одного.
Все действия записываются в лог-файл 1logggg.txt

OS: windows 10

Но постоянно вижу ошибку в лог файле:
Скрипт запущен: 19.05.2024, 17:18:26
Проверка процессов FastExecuteScript.exe
Общее количество процессов FastExecuteScript.exe: 1
Используем команду для получения кол-ва окон: $windows = Get-Process -Name 'FastExecuteScript' | ForEach-Object { $_.MainWindowTitle } | Where-Object { $_ -ne "" }; $windows.Count
Ошибка: = : The term '=' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spell
ing of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:2
+  = Get-Process -Name 'FastExecuteScript' | ForEach-Object { .MainWind ...
+  ~
    + CategoryInfo          : ObjectNotFound: (=:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
.Count : The term '.Count' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
 the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:106
+ ...  ForEach-Object { .MainWindowTitle } | Where-Object {  -ne  }; .Count
+                                                                    ~~~~~~
    + CategoryInfo          : ObjectNotFound: (.Count:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
Скрипт завершен: 19.05.2024, 17:18:34


Код:
const { exec } = require('child_process');
const fs = require('fs');
const path = require('path');

// Лог-файл
const logFile = path.join('C:\\Users\\Administrator\\Downloads', '1logggg.txt');
fs.writeFileSync(logFile, `Скрипт запущен: ${new Date().toLocaleString()}\n`);

// Функция для записи в лог
function log(message) {
    fs.appendFileSync(logFile, `${message}\n`);
}

// Функция для выполнения команд и получения результата
function execCommand(command) {
    return new Promise((resolve, reject) => {
        exec(command, { shell: 'powershell.exe' }, (error, stdout, stderr) => {
            if (error) {
                reject(stderr.trim());
            } else {
                resolve(stdout.trim());
            }
        });
    });
}

// Функция для получения количества видимых окон для процесса
async function getVisibleWindowsCount(processName) {
    const script = `$windows = Get-Process -Name '${processName}' | ForEach-Object { $_.MainWindowTitle } | Where-Object { $_ -ne "" }; $windows.Count`;
    log(`Используем команду для получения кол-ва окон: ${script}`);
    return execCommand(`powershell -command "${script}"`);
}

// Основная функция
async function main() {
    try {
        log('Проверка процессов FastExecuteScript.exe');
        
        // Получаем список процессов FastExecuteScript.exe
        const tasklistOutput = await execCommand('tasklist /FI "IMAGENAME eq FastExecuteScript.exe" /FO CSV /NH');
        const processes = tasklistOutput.split('\n').filter(line => line.trim() !== '').map(line => {
            const columns = line.split('","').map(col => col.replace(/"/g, '').trim());
            return { pid: columns[1], name: "FastExecuteScript" }; // имя процесса без расширения
        });

        log(`Общее количество процессов FastExecuteScript.exe: ${processes.length}`);
        
        if (processes.length > 0) {
            for (const process of processes) {
                // Получаем количество видимых окон для процесса
                const visibleWindowsCount = await getVisibleWindowsCount(process.name);
                log(`Процесс FastExecuteScript.exe с ID ${process.pid} имеет ${visibleWindowsCount} видимых окон(а)`);
                
                // Если видимых окон больше одного, завершаем процесс
                if (parseInt(visibleWindowsCount) > 1) {
                    log(`Процесс FastExecuteScript.exe с ID ${process.pid} имеет больше одного видимого окна. Закрытие процесса.`);
                    await execCommand(`taskkill /PID ${process.pid} /T /F`);
                } else {
                    log(`Процесс FastExecuteScript.exe с ID ${process.pid} имеет одно или меньше видимых окон.`);
                }
            }
        } else {
            log('Нет запущенных процессов FastExecuteScript.exe');
        }
    } catch (error) {
        log(`Ошибка: ${error}`);
    } finally {
        log(`Скрипт завершен: ${new Date().toLocaleString()}`);
    }
}

main();
  • Вопрос задан
  • 614 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы