PowerShell делает команды exes инертными? - PullRequest
2 голосов
/ 25 января 2011

Я по ошибке использовал приведенную ниже конструкцию PowerShell для захвата stdout:

 $output = devenv.exe .....

Или, если я вызываю exe-файл как параметр функции:

 obj.LogOutput((devenv.exe ...))

После того, как любая из этих командВсе последующие команды, выполненные в одном и том же окне команд, ничего не делают.Например, если я запускаю devenv, echo или xcopy, они немедленно возвращаются без выполнения.Если я запускаю "devenv /?"выход не был произведен.Если я закрыл командное окно и запустил новое, все вернулось в нормальное состояние.Я смог снова выполнить эти команды.

Что дает?Я знаю, что синтаксис неправильный, но PowerShell никогда не ошибался в синтаксисе.Вместо этого он молча завершается ошибкой при выполнении последующих EXE-файлов (кстати, команды PowerShell продолжают работать).Как насчет моего синтаксиса, который так плохо запустил PowerShell?Я спрашиваю в основном потому, что снова вижу это поведение, но я могу найти любую из вышеперечисленных конструкций в моем скрипте.

Обновление: Моим лучшим предположением была эта конструкция:

$o = new-object psobject
$o | add-member -force -memberType ScriptMethod -name Test -value { param($t) $t > c:\temp\output.txt" }
$o.Test((xcopy /?))

Это было оченьпохож на строку кода, которая вызывала проблему в моем исходном скрипте, но этот отдельный код не воспроизводит проблему.В любом случае, я думаю, что не было бы никакого синтаксиса, который я мог бы придумать, который сделал бы все EXE-файлы неработоспособными.

1 Ответ

1 голос
/ 25 января 2011

http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/5148df55-b1bf-4eeb-a84c-ca0e1a728db4

Очевидно, существует проблема передачи массива в write-host, который портит ввод команды в будущем.

...