Attendre la fin d'un process avant de continuer une boucle
Bonjour,
Je cherche depuis un bout de temps la façon de lancer un process avec les contraintes suivantes
- Windows 2003 SP2 R2
- powershell v1
- .NET 3.5 SP1
- à partir d'un batch, lancer un ps1
- lancer une installation de SQL et terminer ce process avant de continuer la boucle
Le batch lance uniquement le ps1. Voici le code du ps1:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [...]
#
# SQL Server Installation
#
#pour info $sourcesDir = "C:\sources\"
#le setup.ini contient les paramètres d'installation de SQL, manuellement c'est ok
&($sourcesDir+"setup.exe") /qb SQLACCOUNT=$SQLACCOUNT SQLPASSWORD=$SQLPASSWORD AGTACCOUNT=$AGTACCOUNT AGTPASSWORD=$AGTPASSWORD SQLBROWSERACCOUNT=$SQLBROWSERACCOUNT SQLBROWSERPASSWORD=$SQLBROWSERPASSWORD /settings ($sourcesDir+"setup.ini")
Write-Host "$scriptName Complete"
}
.$path\FLEXSQL-End.ps1 |
Dans une boucle if, je demande à installer SQL Server 2005 Express. La commande se lance très bien mais malheureusement, la fin du script continue, et mon FLEXSQL-End.ps1 reboot le serveur (c'est son travail avec un shutdown).
Sur les exemples de msdn ou technet, on me dit de faire un start /w <path>setup.exe, mais la commande est lancée à partir de powershell, donc "Start" n'est pas reconnue comme un cmdlet.
J'ai voulu utiliser start-process, mais powershell v1... pas disponible.
J'utilise alors [system.diagnostics.process] pour lancer l'application
Code:
1 2 3 4 5 6
|
$setup = ($sourcesDir+"setup.exe")
$args = "/qb SQLACCOUNT=$SQLACCOUNT SQLPASSWORD=$SQLPASSWORD AGTACCOUNT=$AGTACCOUNT AGTPASSWORD=$AGTPASSWORD SQLBROWSERACCOUNT=$SQLBROWSERACCOUNT SQLBROWSERPASSWORD=$SQLBROWSERPASSWORD"
$settings ="/settings"+($sourcesDir+"setup.ini")
$InstSQL = $setup+" "+$args+" "+$settings
$process = [system.diagnostics.process]::start($InstSQL) |
$process ne se lance pas :
Code:
1 2 3 4
|
Exception calling "Start" with "1" argument(s): "The system cannot find the file specified"
At line:1 char:36
+ [system.diagnostics.process]:start( <<<< $InstSQL) |
[system.diagnostics.process]:start demande un [string] exécutable
Si je mets $setup à la place de $InstSQL, ça fonctionne, sauf qu'il me manque tous les paramètres de la commande...
Il doit y avoir une solution simple à ce problème, je continue de chercher.
S'il n'y a pas de solution en ces termes, dois-je installer PS v2 ou créer une fonction compatible avec le .NET 3.5 ?
Merci pour votre aide.
Vincent