2012-02-06 20 views
8

Windows'da Node.js'de bir dosyanın sahibini bulmaya çalışıyorum. Bir Win32API yokluğunda, ben PowerShell komutunu kullanın düşündüm:NodeJS'den PowerShell'i Çağırma

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

Bu komut satırından ve bir toplu iş dosyasından mükemmel çalışıyor, ama sadece node.js exec() ile asılı:

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

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

PowerShell işlemi sadece başlatılıyor ve hiçbir zaman sona ermiyor gibi görünüyor.

herkes var mı:

  1. me Windows üzerinde node.js sahip bir dosya sahibini almak için komut node.js dönmek ya da tercihen
  2. aklı başında bir yol olmayacaktır neden bir fikir ?

cevap

9

Powershell'i böyle çağırıyorsanız, giriş akışını kapatmanız gerekir. Spawn kullanmayı deneyebilir ve stdin.end()'u kullanabilirsiniz.

Diğer seçenek cmd /c dir /q <file> numaralı telefonu aramaktır, ancak bu çıktı ayrıntılıdır.

+1

'child = exec (...); child.stdin.end(); 've mükemmel çalışıyor. Teşekkürler. – tjdett

+0

Bu cevap benim için de çalıştı. Teşekkür ederim. Bunu yaşayan ya da merak eden başkalarının referansı için bir not. Bu sadece Powershell 2 ve daha önce (Windows 7 ile 2 gemi) stdin.end() çağrısı olmadan olur. Powershell 3 ve sonrası için (3 ile Windows 8 ve 5 ile 10 gemi), gerekli değildir ve beklendiği gibi çalışır. –