اذهب إلى المحتوى

السؤال

نشر

لدي سكريب Powrshell على نفس السيرفر الذي أستخدم عليه Node.js وأريد تنفيذ هذا السكريبت
قمت بالبحث ووجدت أنه يمكنني تنفيذ ذلك بإستخدام "child_process" ولكنني لا أعلم ماهو "child_process" وكيف يمكنني إستخدامه لتنفيذ سكريبت powershell داخل Node.js.
فهل يمكنكم المساعدة ؟

Recommended Posts

  • 0
نشر

تمكّننا وحدة child_process من الوصول إلى وظائف نظام التشغيل عن طريق تشغيل أي أمر نظام داخل عملية فرعية 

و كما هو معروف فان النود هو Single Thread (ذو ترابط واحد فقط ) لذلك يمكننا تعزبز وضع عمل النود على الجهاز من خلال إستخدام مصادر الجهاز أو السيرفير مباشرة حيث يمكن إستخدام هذه الطريقة لعمل أوامر مباشرة عن طريق ال shell او  command line للسيرفير و يمكنك من خلالها إجراء أي أمر بإستخدام واجهة الاوامر الكتابية Command Line

و هنا مثال بسيط يمكنك من خلاله القيام بهذه العملية 

// تعريف لوحة اوامر 
const { exec } = require('child_process');

// هنا تقوم بتمرير الامر الى لوحة الاوامر و تنفيذها 
//  هذه امر بسيط للبحث 
exec('find . -type f | wc -l', (err, stdout, stderr) => {
  if (err) {
    console.error(`exec error: ${err}`);
    return;
  }

  console.log(`Number of files ${stdout}`);
});

 

  • 0
نشر

إن Node.js تعمل بأسلوب المسلك الواحد single-threaded, non-blocking performance وهذا غير كافي لاتمام عمليات المعالجة الضخمة و الكثيرة.

إن كل برنامج يتمثل في نظام التشغيل بعملية process تكون منفصلة في البيانات و الشيفرة البرمجية، ولكن مع تطور أنظمة التشغيل أصبحت المعالجات تدعن تعدد العمليات المتزامنة، لذلك ظهرت خاصية child process والتي هي نسخة من العملية الأب لكنها تعمل بجزء مختلف من الشيفرة البرمجية حيث تتواصل هذه العمليات عن طريق built-in messaging system.

لتنفيذ ملف أو سكربت سوف نقوم بتضمين المكتبة Child Processes: ثم يتم تمرير مسار الملف مع المعاملات من خلال الدالة exec:

const { exec } = require('child_process');

exec('"/path/to/file file.sh" arg1 arg2');

نمرر سلسلة نصية تحوي مسار الملف مع اسمه 
ثم الوسطاء أو البيانات

طريقة أخرى:

const { exec } = require('child_process');
exec('الأمر الذبي نريد تنفيذه', 
     {'shell':'powershell.exe'},
     (error, stdout, stderr)=> {
    // السكربت
})

 

  • 0
نشر

يمكنك استخدام هذا الكود لتنفيذ سكريبت الPowershell بإستخدام عملية فرعية child_process والاستماع لل stdout لمخرجات الأمر ولل stderr للأخطاء

var spawn = require("child_process").spawn,child;
child = spawn("powershell.exe",["c:\\temp\\helloworld.ps1"]); // هنا تضع السكريبت مع المسار
child.stdout.on("data",function(data){
    console.log("Powershell Data: " + data); // يقوم بطباعة البيانات من تنفيذ السكريبت
});
child.stderr.on("data",function(data){
    console.log("Powershell Errors: " + data); // طباعة الأخطاء من تنفيذ السكريبت
});
child.on("exit",function(){
    console.log("Powershell Script finished"); // طباعة أن السكريبت قد إتنهى من التنفيذ عند الإغلاق
});
child.stdin.end(); //إنهاء الإدخال

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...