Сценарий запуска в 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 
Другие вопросы по тегам