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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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