PowerShell - вывод в переменную не работает - PullRequest
2 голосов
/ 12 ноября 2010

Я пишу довольно длинный скрипт PowerShell для выполнения множества функций.По большей части все идет очень хорошо.

Однако, Еще одна функция, которую я запускаю на всех уровнях сценария, - очень подробный журнал.Я опубликую часть командной строки в качестве примера (упрощенно):

    $Batch = $RunMe[1]
    $ResultCode = (Invoke-Expression $Batch -ErrorAction Stop)
    $ResultCode

Мой ожидаемый результат:

Return Code 0

Тогда я запишу это.Вместо этого я получаю что-то вроде:

C:\batchfiles\batchfile.bat argument

Какую команду я использую Invoke-Expression для выполнения.

Некоторое быстрое объяснение переменных:

$RunMe - это массив, в котором хранятся команды (0 - это «Пакет» или «Proc», а 1 - команда для запуска)

$Batch созданов написанном коде (это первая ссылка на него)

$CurrFileToExec - текущий обрабатываемый файл (сценарий одновременно запускается в папке).Я использую его для замены строки для командной строки, полученной из SQL.

Я не могу получить $ResultCode, чтобы передать правильный вывод команды.Он просто снова передает функцию командной строки ($Batch).

Как я уже сказал, фактическая функциональная часть работает отлично, но я не могу получить этот код возврата в свой лог-файл.

Ответы [ 2 ]

5 голосов
/ 12 ноября 2010

Если я могу предположить, что $ batch содержит внешние исполняемые файлы, код возврата будет находиться в автоматической переменной $ LASTEXITCODE - возвращаемое выражение invoke-expression состоит из вещей, записанных в STDOUT и STDERR внешними приложениями, или вещей, записанных в выходные данные powershell или потоки ошибок с помощьюскрипт.Он не будет содержать код возврата в стиле dos исполняемого файла, если вы его вызвали.

4 голосов
/ 15 ноября 2010

Решение было изменить мою переменную $Batch, чтобы добавить cmd /c в начало.Я думаю, что была проблема только с использованием Invoke-Expression и ограничением выходного параметра.Я добавил строку для:

$Batch = "cmd /c " + $Batch

Затем снова запустился, и $ResultCode получил ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...