Acontece que o problema era um parâmetro "-PassThru" ausente, pois, por padrão, o cmdlet Start-Process não gerava saída - então, o erro era eu tentar atribuir null à variável "$ sqlreturn"
No servidor 2012 R2, estou montando a mídia SQLServer como uma unidade (funciona), mas toda vez que eu inicio a instalação usando "Start-Process", o erro "Um parâmetro posicional não pode ser encontrado aceitando o argumento '$ null '"é sempre gerado mesmo que meus caminhos e argumebnts sejam bons (a instalação é concluída com êxito).
$sqlreturn = Start-Process -FilePath "$DVDDriveLetter'\Setup.exe" -ArgumentList "$ArgumentList" -Wait
A instalação funciona, eu tenho uma longa lista de argumentos, como uma coleção, que também é reconhecida corretamente (todos os parâmetros funcionam para SQL). Eu tenho que escrever os argumentos usando um loop foreach com Write-Verbose e eveything é reconhecido pelo parâmetro Start-Process "-ArgumentList" corretamente:
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
Então, por que eu sempre recebo o erro "Um parâmetro posicional não pode ser encontrado aceitando o argumento '$ null'" com o Start-Process, mesmo que a instalação funcione corretamente?
Acontece que o problema era um parâmetro "-PassThru" ausente, pois, por padrão, o cmdlet Start-Process não gerava saída - então, o erro era eu tentar atribuir null à variável "$ sqlreturn"
Tags powershell