【问题标题】:start-process in PowerShell 3.0 script doesn't work but it was working in 2.0PowerShell 3.0 脚本中的启动进程不起作用,但它在 2.0 中工作
【发布时间】:2014-04-10 08:39:40
【问题描述】:

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

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

脚本有点长,但这是我可以测试失败的 sn-p 的方式。

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

提前致谢。

【问题讨论】:

    标签: powershell powershell-3.0 start-process


    【解决方案1】:

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

    【讨论】:

    • DMT 是将数据导入我们的 ERP 系统的应用程序。它正在等待,因为它首先需要导入采购订单标题,然后它将单独导入它们的行。我相信 $Param 字符串的格式正确,因为我创建的日志文件正确显示了它: Start-Process E:\epicor\Epicor905\Client\dmt.exe -ArgumentList '-user="dmt" -pass="dmtUser" - server=FIESP-MARS -port=9401 -import="PO Combined" -source="E:\epicor\PowerShell\export\POAutomation\AutomaticPOHeaders.csv" -add=true -update=false -noui=true' -Wait .
    • 如果我直接在 PS 命令行中使用启动进程,它可以工作,但是从脚本运行时它不会。
    • 你如何调用你的脚本?
    • dmt 只等待一个参数(argumentlist 变量)对吗?
    • 不,每个-xxxx都是dmt的参数。正如我所说,当我们使用 PS 2.0 时,脚本曾经运行良好,现在使用 3.0 时它就无法运行了。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,我试试这个。
    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多