1

我将我们的 PS 版本升级到 3.0,我们的一些脚本停止工作。经过大量调试后,我意识到 Start-Process 命令存在问题。

基本上,当我直接在 PowerShell cmd 中运行 Start-Process 时,它会使用正确的参数运行程序。但是,当我运行脚本时,它不会给出任何错误,但程序不会运行。

该脚本有点长,但这是我可以测试失败的片段的方式。

$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个多小时了。

提前致谢。

4

2 回答 2

0

我遇到了同样的问题。我注意到如果 -noui=true 被删除,它似乎工作。

于 2014-10-30T11:16:57.113 回答
0

我不知道 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   

您可以尝试从 cmd.exe 启动 dmt 吗?就像是 :

$p=@("/C";"dmt.exe";"-user'test'" ....)
Start-Process -NoNewWindow cmd.exe $p 
于 2014-04-10T09:08:07.523 回答