在服务器 2012 R2 上,我将 SQLServer 媒体安装为驱动器(可以工作),但每次我使用“Start-Process”启动安装时,总是会生成错误“找不到接受参数‘$null’的位置参数”,即使我的路径和参数都很好(安装成功完成)。
$sqlreturn = Start-Process -FilePath "$DVDDriveLetter`\Setup.exe" -ArgumentList "$ArgumentList" -Wait
安装成功,我确实有一个很长的参数列表,作为一个集合,它也被正确识别(所有参数都适用于 SQL)。我让它使用带有 Write-Verbose 的 foreach 循环写出参数,并且 Start-Process 参数“-ArgumentList”正确识别了所有内容:
Write-Verbose "--- Full Argument List:"
foreach ($arg in $ArgumentList) {Write-Verbose $arg}
VERBOSE: --- Full Argument List:
VERBOSE: /ACTION=Install
VERBOSE: /IACCEPTSQLSERVERLICENSETERMS
VERBOSE: /X86=False
VERBOSE: /TCPENABLED=1
VERBOSE: /SQLSYSADMINACCOUNTS=DOMAIN\server_admins DOMAIN\SQLServer_admins
VERBOSE: /QS
VERBOSE: /FEATURES=SQLENGINE,REPLICATION,FULLTEXT,BIDS,CONN,IS,BC,SDK,BOL,SSMS,ADV_SSMS,SNAC_SDK
VERBOSE: /INSTANCENAME=MSSQLSERVER
VERBOSE: /INSTANCEID=MSSQLSERVER
VERBOSE: /SQLBACKUPDIR=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup
VERBOSE: /SQLUSERDBDIR=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data
VERBOSE: /SQLUSERDBLOGDIR=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data
VERBOSE: /SQLTEMPDBDIR=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data
VERBOSE: /SQLTEMPDBLOGDIR=C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data
VERBOSE: /SQLSVCACCOUNT=DOMAIN\MSAAccount1$
VERBOSE: /AGTSVCACCOUNT=DOMAIN\MSAAccount2$
VERBOSE: /ISSVCACCOUNT=DOMAIN\MSAAccount3$
VERBOSE: /SAPWD=System.Security.SecureString
VERBOSE: /SECURITYMODE=SQL
那么,为什么即使安装正常,我在使用 Start-Process 时总是会收到错误“找不到接受参数‘$null’的位置参数”?
答案1
事实证明,问题在于缺少“-PassThru”参数,因为默认情况下,Start-Process cmdlet 不会生成任何输出 - 所以错误是我试图将“$sqlreturn”变量赋值为 null