Question Fichier de trace d execution de script

Plus d'informations
il y a 15 ans 8 mois #7293 par gloo
Bonjour,

Connaissez vous un moyen de dupliquer la sortie standard et erreur standard vers un fichier ?

Par exemple, en KSH j'ecrivais dans mon script des lignes du genre

[code:1]
ligne_de_commande_1 2>&1 | tee -a fic.log
ligne_de_commande_2 2>&1 | tee -a fic.log
ligne_de_commande_3 2>&1 | tee -a fic.log
[/code:1]

(2>&1 redirige l erreur standard vers la sortie standard et tee -a duplique la sortie standard dans un fichier en ajout)

cela permettait de voir l affichage de l execution du script a l ecran et d'avoir les traces en fichier de log pour consulation ultérieure...

S.<br><br>Message édité par: gloo, à: 29/06/10 14:30

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 8 mois #7298 par Laurent Dardenne
Sur les redirections tu peux consulter cette page et le fichier d'aide about_Redirection.

Sous PS il existe le cmdlet Tee-object, par contre les redirections, si je me souviens bien, n'ont rien à avoir avec le pipeline, on ne peut pas rediriger le flux de sortie ET l'émettre dans le pipeline.
Ceci ne fonctionne pas :
[code:1]
Dir mydata.txt, myfiles.txt &gt; output.txt 2&gt;&amp;1|Foreach -begin {Write-host \&quot;BEGIN\&quot;} -process {write-host $_ -f
ore green} -end {\&quot;END\&quot;; $res=$input|% {$_}; $res -eq $null}
[/code:1]
Le parseur ne renvoi pas d'erreur, les blocs Begin et End sont bien exécutés mais le bloc Process ne reçoit aucun objet.

Il est possible d'utiliser Start-Transcript, mais il ne gére pas les erreurs ni les affichages sur la console réalisés à l'aide Write-Host.

La gestion des logs n'est pas aisé nativement sous PS.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 8 mois #7299 par gloo
merci pour tes reponses.


Tee-object a l'air de faire comme tee.
Par contre je ne trouve pas l'option en mode ajout pour qu il ne tronque pas systematiquement le fichier.

concernant Start-Transcript, ca me semble sympa. Je l'appelle dans mon script et tout est tracé sans etre obligé d ajouter ma commande en fin de chaque ligne ...sauf que si je fais Control-C, le script n'a pas atteint le Stop-Transcript
et ma session PS continue a ecrire dans le fichier de log... J'aurais cru que le stop aurait été implicite puisque que le processus fils a été arreté.... enfin... dans le cas ou executer un script genere bien un processus fils.... (non?)

qu en penses tu ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 8 mois #7300 par Laurent Dardenne
gloo écrit:

Par contre je ne trouve pas l'option en mode ajout pour qu il ne tronque pas systematiquement le fichier.

Il n'en existe pas, le mode ajout, dans un fichier, est aussi un manque sur de nombreux cmdlets.
Reste à le demander sur MSConnect.
gloo écrit:

dans le cas ou executer un script genere bien un processus fils.... (non?)

Non, il n'y a pas de création de process fils, mais d'un thread dédié à l'exécution du pipeline, voir ce tutoriel .
Exemple :
[code:1][Threading.Thread]::CurrentThread.ManagedThreadId|%{\&quot;ID : $_\&quot;}[/code:1]
gloo écrit:

sauf que si je fais Control-C, le script n'a pas atteint le Stop-Transcript

je ne connais pas de solution native à ce pb.
Par contre tu peux déterminer si une transaction existe et dans ce cas la clore, consulte ce post .

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 8 mois #7301 par Laurent Dardenne
Laurent Dardenne écrit:

je ne connais pas de solution native à ce pb.

j'ajoute Pour PS v1.
Pour PS V2, c'est possible à l'aide d'un événement statique sur la classe console :
[code:1]
#Event static
$ConsoleCtrlC= [System.Console]
$timeChanged = Register-ObjectEvent -InputObject $ConsoleCtrlC `
–EventName 'CancelKeyPress' `
-Action { Write-Host \&quot;Event : Stop transcript.\&quot; }

1..10|% {Sleep -m 200;Write-host $_}[/code:1]
Reste la combinaison Control-Pause, mais là c'est l'application PowerShell.exe qui se termine...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.045 secondes
Propulsé par Kunena