安装参数,破坏自动PowerShell安装

时间:2017-05-15 16:45:34

标签: powershell sql-server-data-tools ssdt-bi

我正在通过PowerShell脚本安装SQL数据工具。我运行我的脚本,但安装数据工具的最后部分失败(在SQL安装程序窗口内)。如果我在没有该部分的情况下运行脚本,并手动安装数据工具,则可以正常工作。

错误是:

  

VS Shell安装失败,退出代码为-2147205120。

安装.NET和SQL Server Management Studio之前的部分。我不认为它们与我的问题有关,但如果有要求,我会发布该部分。以下是相关部分。第一个try块安装SQL SP1(现在已删除以便于阅读),第二个安装数据工具和SNAC_SDK。

try
{
    Write-Host "Lauching SQL Server Data Tools install ..."
    & "\\mynetworkpath\SSDTBI_x86_ENU.exe" "/ACTION=INSTALL" "/FEATURES=SSDTBI,SNAC_SDK" "/Q" "/IACCEPTSQLSERVERLICENSETERMS"
    Write-Host "Installer launched ..."
}
catch
{
    Write-Host "SQL Server Data Tools installation failed"
    exit
}

我已经尝试了解数据工具安装部分的参数,并使用-wait动词来确保SP1确实完成,但没有运气。

编辑:根据Matt的建议,我将/ NORESTART添加到我的参数列表中,但现在它没有安装任何东西,也没有错误......

编辑:使用带引号的参数添加了更新的代码。仍然不起作用,但我认为它比原来更接近。

1 个答案:

答案 0 :(得分:2)

我认为参数中的逗号是罪魁祸首,因为powershell将用逗号分隔的实体解释为数组。

你可以看到参数如何通过这个小黑客传递

& { $args } /ACTION=INSTALL /FEATURES=SSDTBI,SNAC_SDK /Q /IACCEPTSQLSERVERLICENSETERMS

给出了

  

/ ACTION = INSTALL

     

/ FEATURES = SSDTBI

     

SNAC_SDK

     

/ Q

     

/ IACCEPTSQLSERVERLICENSETERMS

要解决此问题,您至少需要引用FEATURES参数。我经常在这些情况下引用一切,只是为了保持一致,所以

& { $args } "/ACTION=INSTALL" "/FEATURES=SSDTBI,SNAC_SDK" "/Q" "/IACCEPTSQLSERVERLICENSETERMS"

为您提供所需的参数:

  

/ ACTION = INSTALL

     

/ FEATURES = SSDTBI,SNAC_SDK

     

/ Q

     

/ IACCEPTSQLSERVERLICENSETERMS

更新:许多安装程序在调用后立即返回,而安装过程仍然在后台运行,当脚本的其余部分依赖于安装时,这可能是一个错误。

有几种方法可以使PowerShell等待进程退出。最短的一个是使用Out-Null这样:

& "\\mynetworkpath\SSDTBI_x86_ENU.exe" "/ACTION=INSTALL" "/FEATURES=SSDTBI,SNAC_SDK" "/Q" "/IACCEPTSQLSERVERLICENSETERMS" | Out-Null

您可能还希望之后查看$? or $LASTEXITCODE以检查错误。