2012-02-06 19 views
8

से पावरशेल को कॉल करना मैं विंडोज़ पर नोड.जेएस में फ़ाइल के मालिक को प्राप्त करने का प्रयास कर रहा हूं। एक win32api के अभाव में, मैंने सोचा कि मैं एक PowerShell आदेश का उपयोग करेंगे:नोडजेएस

powershell -Command "(get-acl test.txt).owner" 

यह कमांड लाइन से और एक बैच फ़ाइल से पूरी तरह से काम करता है, लेकिन सिर्फ Node.js exec() साथ लटका हुआ है:

var exec = require('child_process').exec; 

exec('powershell -Command "(get-acl test.txt).owner"', function(err,sysout,syserr) { 
    console.dir(sysout); 
}); 

पावरशेल प्रक्रिया बस शुरू होती है और कभी समाप्त नहीं होती है।

किसी को भी है:

  1. क्यों आदेश Node.js में वापस नहीं होगा, या अधिमानतः
  2. एक समझदार तरीका मुझे विंडोज पर Node.js के साथ एक फ़ाइल मालिक पाने के लिए पर एक विचार ?

उत्तर

9

जब आप पावरहेल को कॉल कर रहे हैं तो आपको इनपुट स्ट्रीम को बंद करने की आवश्यकता है। आप स्पॉन का उपयोग करने की कोशिश कर सकते हैं और stdin.end() का उपयोग कर सकते हैं।

अन्य विकल्प cmd /c dir /q <file> पर कॉल करना है, लेकिन यह आउटपुट वर्बोज़ है।

+1

मैंने 'child = exec (...) का उपयोग किया; child.stdin.end(); 'और यह पूरी तरह से काम करता है। धन्यवाद। – tjdett

+0

यह उत्तर मेरे लिए भी काम किया। धन्यवाद। इसका अनुभव करने वाले लोगों के संदर्भ में या इसके बारे में सोचने के संदर्भ में एक नोट। यह केवल powershell 2 और पहले (विंडोज 7 के साथ 2 जहाजों) stdin.end() कॉल के बिना होता है। पावरहेल 3 और बाद में (विंडोज 8 और 5 के साथ 3 जहाजों के लिए), यह जरूरी नहीं है और उम्मीद के अनुसार काम करता है। –

संबंधित मुद्दे