Сценарий запуска в PowerShell 3.0 не работает, но работал в 2.0
Я обновил нашу версию PS до 3.0, и некоторые наши скрипты перестали работать. После долгих отладок я понял, что есть проблема с командой Start-Process.
По сути, когда я запускаю Start-Process непосредственно в PowerShell, он запускает программу с правильными аргументами. Однако, когда я запускаю скрипт, он не выдаст никакой ошибки, но программа не запустится.
Сценарий немного длинный, но так я могу протестировать фрагмент, который не работает.
$SERVER = 'servername'
$PORT = 'xxxx'
$TPath = 'E:\epicor\PowerShell\export\POAutomation\'
$User = 'username'
$Psw = 'password'
$Import = 'PO Combined'
$file = $TPath + 'AutomaticPOHeaders.csv'
$DMTPATH = 'E:\epicor\Epicor905\Client\dmt.exe'
$Param = "-ArgumentList `'-user=`"$User`" -pass=`"$Psw`" -server=$SERVER -port=$PORT -import=`"$Import`" -source=`"$file`" -add=true -update=false -noui=true`'"
Start-Process $DMTPATH $Param -Wait
"Finished"
Я даже написал в файл журнала, чтобы проверить, правильно ли сформирована строка $Param и хорошо ли написана команда Start-Process. Когда я копирую, вставляю строки из файла журнала в командную строку PS, они запускаются успешно.
Я застрял с этим более 4 часов.
Заранее спасибо.
2 ответа
Я сталкиваюсь с той же проблемой. Я заметил, что если -noui=true удалено, это похоже на работу.
Я не знаю, что ждет DMT, но эта команда успешно работает на PS V3. Вы уверены в своем параметре списка аргументов? и, кажется, беспорядок с вашими цитатами
небольшие изменения: используйте echoargs.exe вместо DMT и добавьте переключатель, чтобы не открывать новое окно:
$DMTPATH = 'echoargs.exe'
$Param = "-ArgumentList `'-user=`"$User`" -pass=`"$Psw`" -server=$SERVER -port=$PORT -import=`"$Import`" -source=`"$file`" -add=true -update=false -noui=true`'"
Start-Process -nonewwindow $DMTPATH $Param -Wait
"Finished"
Результаты:
Arg 0 is <-ArgumentList>
Arg 1 is <'-user=username>
Arg 2 is <-pass=password>
Arg 3 is <-server=servername>
Arg 4 is <-port=xxxx>
Arg 5 is <-import=PO Combined>
Arg 6 is <-source=E:\epicor\PowerShell\export\POAutomation\AutomaticPOHeaders.csv>
Arg 7 is <-add=true>
Arg 8 is <-update=false>
Arg 9 is <-noui=true'>
Command line:
"C:\Windows\EchoArgs.exe" -ArgumentList '-user="username" -pass="password" -server=servername -port=xxxx -import="PO Combined" -source="E:\epicor\PowerShell\export\POAutomation\AutomaticPOH
aders.csv" -add=true -update=false -noui=true'
Finished
Можете ли вы попробовать запустить DMT из cmd.exe? что-то вроде:
$p=@("/C";"dmt.exe";"-user'test'" ....)
Start-Process -NoNewWindow cmd.exe $p