2012-02-06 18 views
8

Estoy intentando obtener el propietario de un archivo en Node.js en Windows. En ausencia de un win32api, pensé que haría uso de un sistema de PowerShell:Llamando a PowerShell desde NodeJS

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

Esto funciona perfectamente desde la línea de comandos y desde un archivo por lotes, pero sólo se bloquea con Node.js exec():

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

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

Parece que el proceso de PowerShell se inicia y nunca finaliza.

¿Alguien tiene:

  1. una idea de por qué el comando no volverá en Node.js, o preferiblemente
  2. una manera sana para que consiga el propietario de un archivo con Node.js en Windows ?

Respuesta

9

Cuando llame a Powershell de esa manera, necesitará cerrar el flujo de entrada. Puede intentar usar spawn y usar stdin.end().

Otra opción es llamar al cmd /c dir /q <file> pero esa salida es detallada.

+1

Utilicé 'child = exec (...); child.stdin.end(); 'y funciona perfectamente. Gracias. – tjdett

+0

Esta respuesta funcionó para mí también. Gracias. Una nota para la referencia de otros que experimentan esto o que se preguntan al respecto. Esto solo ocurre con Powershell 2 y versiones anteriores (2 se incluyen con Windows 7) sin la llamada a stdin.end(). Para Powershell 3 y posteriores (3 se incluyen con Windows 8 y 5 con 10), no es necesario y funciona como se esperaba. –