2012-02-06 13 views
8

Próbuję uzyskać właściciela pliku w Node.js w systemie Windows. W przypadku braku Win32API, pomyślałem, że użyć polecenia PowerShell:Wywołanie PowerShell z NodeJS

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

Działa to doskonale z linii poleceń oraz z pliku wsadowego, ale po prostu wisi z node.js exec():

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

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

Proces PowerShell wydaje się zacząć i nigdy się nie kończy.

Czy ktoś ma:

  1. pomysł dlaczego polecenie nie powróci w node.js lub korzystnie
  2. rozsądna droga dla mnie, aby uzyskać właściciela pliku z node.js na Windows ?

Odpowiedz

9

Kiedy wywołujesz Powershell w taki sposób, musisz zamknąć strumień wejściowy. Możesz spróbować użyć spawn i użyć stdin.end().

Inną opcją jest wywołanie cmd /c dir /q <file>, ale to wyjście jest pełne.

+1

Użyłem 'child = exec (...); child.stdin.end(); 'i działa idealnie. Dzięki. – tjdett

+0

Ta odpowiedź również zadziałała. Dziękuję Ci. Jedna uwaga dla odniesienia dla osób doświadczających tego lub zastanawiających się nad tym. Dzieje się tak tylko w przypadku Powershell 2 i wcześniejszych (2 statki z Windows 7) bez wywołania stdin.end(). W przypadku Powershell 3 i nowszych (3 statki z Windows 8 i 5 z 10) nie jest to konieczne i działa zgodnie z oczekiwaniami. –