Ошибка при вызове стороннего исполняемого файла от Powershell при использовании IDE

У меня есть сценарий PowerShell, который использует du.exe (Использование диска первоначально от Sysinternals) для вычисления размера каталогов.

Если я работаю du c:\Backup в консоли это работает как ожидалось, но та же строка кода, выполненного в ISE или PowerGui, дает ожидаемый результат плюс ошибка

+ du <<<<  c:\backup
+ CategoryInfo          : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

Почему это? Как я избегаю этой ошибки? Я попробовал вызывать-выражение, с помощью &, но никакие не идут.

Спасибо за справку.

64
задан darthbith 16 October 2016 в 03:02
поделиться

1 ответ

Единственная проблема, которую я вижу (и я могу быть недальновидным или неправильным), - это цель. Записи предназначены для хранения данных, а объекты - для манипулирования и использования этих данных. Почему шкафчик для места хранения данных нуждается в процедурах манипулирования?

-121--2298342-

Если вы подозреваете, что получили ошибку OutOfMemory из-за прочтения всей таблицы, почему бы не попытаться разделить запрос. Используйте фильтры, предложение LIMIT и т.д.

-121--3783531-

Чтобы избежать этого, можно перенаправить stderr на значение null, например:

du 2> $null

По существу, консольный хост и ISE (а также удаленное взаимодействие) обрабатывают поток stderr по-разному. На хосте консоли для PowerShell было важно поддерживать такие приложения, как edit.com, чтобы работать вместе с другими приложениями, которые записывают цветные выходные данные и ошибки на экран. Если поток ввода-вывода не перенаправляется на хост консоли, PowerShell предоставляет встроенному EXE дескриптор консоли для прямой записи. Это обходит PowerShell, поэтому PowerShell не может видеть, что были написаны ошибки, поэтому он не может сообщить об ошибке через $ error или путем записи в поток stderr PowerShell.

ISE и удаленное взаимодействие не должны поддерживать этот сценарий, поэтому они видят ошибки на stderr и впоследствии пишут ошибку и обновляют $ error.

46
ответ дан 24 November 2019 в 15:53
поделиться