Как перехватить выходные данные компилятора замыкания в PowerShell? - PullRequest
3 голосов
/ 25 ноября 2011

Я набираю это в командной строке PowerShell:

java -jar closure-compiler.jar --js temp1.js --js_output_file temp2.js

и вывод этой ошибки:

temp1.js:359: WARNING - Suspicious code. The result of the 'getprop' operator is not being used.
$acms.x
^

0 error(s), 1 warning(s)

(Я точно знаю, что не так с JavaScript: здесь проблема не в этом.)

Я хочу перехватить эту ошибку. Однако, если я попытаюсь:

$errs = java -jar closure-compiler.jar --js temp1.js --js_output_file temp2.js

$ errs заканчивается пустым. Но тогда, если я попытаюсь:

java -jar closure-compiler.jar --js temp1.js --js_output_file temp2.js 2>errs.txt

errs.txt фиксирует это:

java.exe : temp1.js:359: WARNING - Suspicious code. The result of the 'getprop' operator is not being used.
At line:1 char:5
+ java <<<<  -jar closure-compiler.jar --js temp1.js --js_output_file temp2.js 2>errs.txt
    + CategoryInfo          : NotSpecified: (temp1.js:359: W...not being used.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

$acms.x
^



0
 error(s), 
1
 warning(s)

Очевидно, что вывод ошибок из компилятора замыкания чередуется с выводом ошибок PowerShell.

Есть ли способ просто перехватить выходные данные компилятора замыкания?

1 Ответ

3 голосов
/ 25 ноября 2011

Если вы делаете:

$errs = command 2>&1

$errs.Exception даст вам сообщение.

Если произошла только ошибка (и только одна), $ errs будет иметь ErrorRecord и вы сможете выполнить все вышеперечисленное и получить нужную ошибку.

В противном случае это будет массив записей ошибок и / или нормального вывода.

Так что вам придетсядо

$errs | ?{$_.GetType().Name -eq "ErrorRecord"} | select -expand exception

...