我想运行一个可能位于多个位置的.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的整合构建过程。
答案 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上搜索这个。