Page 1 sur 1

[SOLVED] run(powershell script.ps1) timeout

Posté : 27 juil. 2017 - 10:05
par swbsf
Bonjour,
Je tente ma chance ici.
Je crée un paquet de post-installation qui me configurera les postes en exécutant un script powershell. Alors pour répondre tout de suite à une éventuelle question du "pourquoi je ne fais pas cette post-install en pure python?" : parce que j'ai déjà le script en powershell et qu'il est trèèès long. Et puis il n'y a pas de raison qu'on ne puisse pas exécuter du powershell!
Donc quel que soit le script, il timeout, il semblerait que psutils.Popen ne détecte pas le code de sortie du script.
Pour l'exemple j'ai testé avec un script des plus simple :

Code : Tout sélectionner

echo "coucou" > c:\tmp\fichier.txt
exit
Puis dans Python :

Code : Tout sélectionner

run('powershell -NoProfile -NonInteractive -File c:/tmp/test.ps1')
Je constate que le code est bien exécuté, mais l'instruction ne termine jamais, ou plutôt au timeout=600.
Une idée? Quelle autre solution? J'ai aussi testé avec la même erreur :

Code : Tout sélectionner

with open('test.ps1','r') as f:
   data=f.read()
run_powershell(data)
Et c'est encore plus biscornu.
Par avance merci!

Re: run(powershell script.ps1) timeout

Posté : 27 juil. 2017 - 11:44
par swbsf
Pour info, le problème est contourné avec un :

Code : Tout sélectionner

import subprocess
cmd="powershell -NoProfile -NonInteractive -File c:\\tmp\\test.ps1"
proc = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
proc.wait()
stdo,stde = proc.communicate()
print(stdo,stde)

Re: run(powershell script.ps1) timeout

Posté : 27 juil. 2017 - 11:49
par sfonteneau
Avez vous la version 3 de powershell sur le poste ??

https://lists.tranquil.it/pipermail/wap ... 02340.html

Re: run(powershell script.ps1) timeout

Posté : 31 juil. 2017 - 09:01
par swbsf
C'est un Windows 10, donc oui.

Code : Tout sélectionner

    PS C:\Windows\system32> $PSVersionTable.PSversion
     
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      0      10586  122

Re: run(powershell script.ps1) timeout

Posté : 01 août 2017 - 09:27
par swbsf
Bon je reviens sur ce que j'ai dis. L'erreur était bien liée à la version de powershell < 3.0. D'un côté c'était PS 2.0 et de l'autre, juste une machine lente donc timeout=3 était trop court pour lancer une simple commande PS.
Merci pour votre aide précise :)