[RISOLTO] timeout run(powershell script.ps1)

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti Wapt.
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
Bloccato
swbsf
Messaggi: 8
Registrazione: 27 luglio 2017 - 09:50

27 luglio 2017 - 10:05

Buongiorno,
Sto tentando la fortuna qui.
Sto creando un pacchetto di post-installazione che configurerà le workstation eseguendo uno script di PowerShell. Quindi, per rispondere subito a una potenziale domanda del tipo "perché non eseguo questa post-installazione in Python puro?": perché ho già lo script di PowerShell, ed è molto lungo. Inoltre, non c'è motivo per cui non possiamo eseguire PowerShell!
Quindi, qualunque sia lo script, scade il tempo; sembra che psutils.Popen non rilevi il codice di uscita dello script.
Per questo esempio, l'ho testato con uno script molto semplice:

Codice: Seleziona tutto

echo "coucou" > c:\tmp\fichier.txt
exit
Quindi in Python:

Codice: Seleziona tutto

run('powershell -NoProfile -NonInteractive -File c:/tmp/test.ps1')
Noto che il codice viene eseguito correttamente, ma l'istruzione non termina mai, o meglio, al timeout=600.
Avete idee? Quali altre soluzioni ci sono? Ho provato anch'io, ma ho riscontrato lo stesso errore:

Codice: Seleziona tutto

with open('test.ps1','r') as f:
   data=f.read()
run_powershell(data)
Ed è ancora più bizzarro.
Grazie in anticipo!
Ultima modifica di swbsf il 1 agosto 2017 alle 09:28, modificato 1 volta.
swbsf
Messaggi: 8
Registrazione: 27 luglio 2017 - 09:50

27 luglio 2017 - 11:44

Per vostra informazione, il problema viene aggirato con:

Codice: Seleziona tutto

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)
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

27 luglio 2017 - 11:49

Hai installato PowerShell versione 3 su questa macchina?

https://lists.tranquil.it/pipermail/wap ... 02340.html
swbsf
Messaggi: 8
Registrazione: 27 luglio 2017 - 09:50

31 luglio 2017 - 09:01

È Windows 10, quindi sì.

Codice: Seleziona tutto

    PS C:\Windows\system32> $PSVersionTable.PSversion
     
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      0      10586  122
swbsf
Messaggi: 8
Registrazione: 27 luglio 2017 - 09:50

1 agosto 2017 - 09:27

Va bene, ritiro quanto ho detto. L'errore era effettivamente legato alla versione di PowerShell, inferiore alla 3.0. Da un lato, si trattava di PowerShell 2.0, dall'altro, semplicemente il computer era lento, quindi il timeout di 3 secondi era troppo breve per eseguire un semplice comando PowerShell.
Grazie per il tuo aiuto dettagliato :)
Bloccato