安装参数破坏自动 PowerShell 安装
Install arguments breaking an automated PowerShell install
我正在通过 PowerShell 脚本安装 SQL Data Tools。我 运行 我的脚本,但安装数据工具的最后部分失败了(在 SQL 安装程序 window 内部)。如果我 运行 没有该部分的脚本,并手动安装数据工具,它就可以工作。
错误是:
VS Shell installation has failed with exit code -2147205120.
安装 .NET 和 SQL Server Management Studio 之前的部分。我认为它们与我的问题无关,但如果需要,我会 post 那部分。以下是相关部分。第一个 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
}
我曾尝试处理 Data Tools 安装部分的参数,并使用 -wait 动词来确保 SP1 确实完成,但没有成功。
编辑: 根据 Matt 的建议,我将 /NORESTART 添加到我的参数列表中,但现在它没有安装任何东西,也没有错误...
编辑: 添加了带引号参数的更新代码。仍然不起作用,但我认为它比原来更接近。
我认为参数中的逗号是罪魁祸首,因为 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
更新:许多安装程序 return 在安装过程仍在后台运行时被调用后立即执行,当脚本的其余部分依赖于安装时,这可能是一个错误。
有几种方法可以让 powershell 等待进程退出。最短的方法之一是像这样使用 Out-Null
:
& "\mynetworkpath\SSDTBI_x86_ENU.exe" "/ACTION=INSTALL" "/FEATURES=SSDTBI,SNAC_SDK" "/Q" "/IACCEPTSQLSERVERLICENSETERMS" | Out-Null
您可能还想在之后查看 $?
or $LASTEXITCODE
以检查错误。
我正在通过 PowerShell 脚本安装 SQL Data Tools。我 运行 我的脚本,但安装数据工具的最后部分失败了(在 SQL 安装程序 window 内部)。如果我 运行 没有该部分的脚本,并手动安装数据工具,它就可以工作。
错误是:
VS Shell installation has failed with exit code -2147205120.
安装 .NET 和 SQL Server Management Studio 之前的部分。我认为它们与我的问题无关,但如果需要,我会 post 那部分。以下是相关部分。第一个 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
}
我曾尝试处理 Data Tools 安装部分的参数,并使用 -wait 动词来确保 SP1 确实完成,但没有成功。
编辑: 根据 Matt 的建议,我将 /NORESTART 添加到我的参数列表中,但现在它没有安装任何东西,也没有错误...
编辑: 添加了带引号参数的更新代码。仍然不起作用,但我认为它比原来更接近。
我认为参数中的逗号是罪魁祸首,因为 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
更新:许多安装程序 return 在安装过程仍在后台运行时被调用后立即执行,当脚本的其余部分依赖于安装时,这可能是一个错误。
有几种方法可以让 powershell 等待进程退出。最短的方法之一是像这样使用 Out-Null
:
& "\mynetworkpath\SSDTBI_x86_ENU.exe" "/ACTION=INSTALL" "/FEATURES=SSDTBI,SNAC_SDK" "/Q" "/IACCEPTSQLSERVERLICENSETERMS" | Out-Null
您可能还想在之后查看 $?
or $LASTEXITCODE
以检查错误。