使用变量作为Start-Process的filepath参数

时间:2010-12-13 22:59:22

标签: powershell

我想运行一个可能位于多个位置的.exe。

$runpath = "$servicepackfolder\SQLServer2008SP1-KB968369-IA64-ENU.exe"

Start-Process -FilePath $runpath -arg "/x:.\$buildfolder\PCU" 

或者这样,指定WorkingDirectory:

Start-Process 'SQLServer2008SP1-KB968369-IA64-ENU.exe' -WorkingDirectory $servicepackfolder -arg "/x:.\$buildfolder\PCU"

但似乎变量没有被解释为字符串。

  

Start-Process:此命令不能   由于错误而执行:系统   找不到指定的文件。

我在正确的目录中,如果我从$ runpath变量获取输出并将其替换为Start-Process调用中的变量,我会得到预期的行为。

这会起作用,还是我难以对这些路径进行编码。尝试自动化SQL 2008的整合构建过程。

2 个答案:

答案 0 :(得分:1)

我可以复制你看到的行为,如果我添加-NoNewWindow,但是如果我没有指定该参数,它可以按照我的测试用例的预期工作:

start-process sizeof.exe  -WorkingDirectory C:\temp -ArgumentList 1

新窗口闪烁并消失,但我可以看到它正在运行我的临时目录中指定的exe。

答案 1 :(得分:0)

迟到总比没有好,但是当我遇到同样的问题时,我找到了一个解决方法,不确定它是否被归类为错误 -

Powershell并不总是处理字符串中未转义的反斜杠或引号,这些字符串存储在变量/由字符串处理创建的所有-FilePath中,所以对于你的行:

$runpath = "$servicepackfolder\SQLServer2008SP1-KB968369-IA64-ENU.exe"

在使用$ runpath之前尝试以下(或等效的):

$cleanpath = $runpath.replace("\","\\").replace('"',"")

.replace(“\”,“\\”)。replace('“',”“)转义斜杠并删除字符串处理和传递引用的引号,这似乎清除了这个问题(对于某些人来说)例)。

我想象你迟到了,但希望这有助于其他人在Google上搜索这个。