Пытаюсь с помощью
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();