2012-02-06 2 views
8

Windows의 Node.js에서 파일의 소유자를 가져 오려고합니다. win32api의 부재에서, 나는 내가 PowerShell 명령을 사용하는 거라고 생각 :NodeJS에서 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); 
}); 

PowerShell 프로세스가 시작되어 절대로 종료되지 않는 것처럼 보입니다.

는 사람이 있습니까 :

  1. 나 Windows에서 Node.js를 가진 파일의 소유자를 얻을 수에 대한 명령은 Node.js를에 돌아가거나 바람직
  2. 제정신이 방법이 아니다 이유에 대한 아이디어 ?

답변

9

Powershell을 호출 할 때 입력 스트림을 닫아야합니다. 스폰을 시도하고 stdin.end()을 사용하는 것이 좋습니다.

다른 옵션은 cmd /c dir /q <file>을 호출하는 것이지만 출력은 자세한 정보입니다.

+1

'child = exec (...);를 사용했습니다. child.stdin.end();'그리고 완벽하게 작동합니다. 감사. – tjdett

+0

이 답변은 저에게도 도움이되었습니다. 고맙습니다. 이것을 경험하거나 그것에 대해 궁금한 다른 사람들의 참고를위한 하나의 주석. 이것은 powershell 2 이전 버전 (Windows 7에서 2 번 배송)에서만 stdin.end() 호출없이 발생합니다. Powershell 3 이상 (Windows 8이 설치된 3 대의 배송 및 10 대의 5)에는 필요하지 않으며 예상대로 작동합니다. –

관련 문제