Powershell: команда Backgrounding заставляет его не работать - PullRequest
1 голос
/ 22 марта 2012

Мой скрипт хранит кучу команд внешнего приложения из приложения, например, так:

$ app1 = get-command "C: \ Where \ Command \ Расположенный.exe"

Затем я вызываюэто с

& $ app1 -S -P 9000

(где -S -P и 9000 - параметры, которые я бы передал в оболочке cmd.exe).До здесь все работает отлично.Тем не менее, я хочу запустить это как фоновую задачу, и вот тут я начинаю сталкиваться с проблемами.

Start-Job -ScriptBlock {& $ app1 -S -P 9000}

завершается с ошибкой "Выражение после '&' в элементе конвейера породило недопустимый объект. "Я искал в Google около двух дней, и все, что я пробовал, похоже, ничего не значило.Заключение параметров в @ () и попытка их выделить, Invoke-Expression, Invoke-Command, Invoke-Item (пока неясно, что они все делают).Я также попытался преобразовать всю команду в строку и затем вызвать выражение Invoke-Expression в стартовом задании, но, похоже, оно тоже не работает.Так что этот вопрос - ресурсы, чтобы понять, когда все эти вещи уместно использовать и почему это не работает, как только я передаю это фоновому заданию.

1 Ответ

1 голос
/ 22 марта 2012

Попробуйте передать переменную $app1 в блок скрипта:

Start-Job -ScriptBlock {param($app1) & $app1 -S -P 9000 } -ArgumentList $app1

Обратите внимание, что вместо

$app1 = get-command "C:\Where\Command\Located.exe"

Вы также можете просто иметь

$app1 = "C:\Where\Command\Located.exe"
...