2012-02-06 67 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. 爲什麼該命令將不會在返回的Node.js,最好
  2. 一個健全的辦法,我在Windows上獲取文件所有者與Node.js的一個想法?

回答

9

當你像這樣調用Powershell時,你需要關閉輸入流。你可能想嘗試使用產卵並使用stdin.end()

其他選項是調用cmd /c dir /q <file>,但輸出是冗長的。

+1

我用'child = exec(...); child.stdin.end();'它完美地工作。謝謝。 – tjdett 2012-02-06 08:19:35

+0

這個答案也適用於我。謝謝。一個註釋可供其他人蔘考,或對此有所懷疑。這隻發生在沒有stdin.end()調用的Powershell 2和更早的版本(2個Windows 7附帶)上。對於Powershell 3和更高版本(3個Windows 8和5與10),這是沒有必要的,並按預期工作。 – 2016-01-01 21:54:52