, Bruno Orsier Voici un nouvel exemple d'utilisation de Powershell, histoire de peut-être vous donner envie de pratiquer ce shell bien utile. Dans mes tests, j'ai souvent un processus qui tourne en boucle, d'ailleurs grâce un script posté dans un billet précédent. Ce processus génère un fichier de log à chaque fois, ce qui me fait des dizaines de milliers de fichiers. Pour éviter de remplir le disque dur, je voudrais garder uniquement les fichiers de log qui présentent un intérêt, par exemple ceux qui contiennent le mot ERROR. C'est facile en PowerShell, avec un peu de pratique on peut le faire directement sur la ligne de commande :
(le message d'erreur vient d'un fichier en cours d'écriture)
Après avoir mis cela au point sur la ligne de commande comme ci-dessus, je met cette commande dans un fichier de script pour la réutiliser plus tard :
On peut noter dans le script la barre verticale, indiquant un pipeline. Le pipeline passe la sortie de la première commande (la liste de fichier résultant de dir) à la deuxième commande qui consiste en un foreach. Dans le bloc du foreach on référence l'objet courant (le fichier) avec la variable spéciale $_. foreach est un alias pour ForEach-Object (et peut encore se raccourcir en "%", comme dans l'exemple ci-dessous).
Simple, non ?
Un autre exemple dans la même veine consiste à supprimer les fichiers .DATA générés par mes expériences, mais pas trop tôt afin de ne pas interférer avec les analyses en cours - j'attends donc 30 minutes par exemple. Voici un script pour faire cela (j'ai encadré en rouge le calcul sur les dates) :
Voilà le résultat sur la console :
Il restera à mieux formater le taux de génération !
Le même script sous forme de code copiable, au cas où ca vous intéresse de le récupérer :
$DELAY=60*15
$total_deleted = 0
while ($True) {
$deleted = 0
dir c:\data -recurse -include *.data | % {
if ( ((get-date)-$_.LastWriteTime).TotalMinutes -gt 30) {
del $_ ; $deleted += 1
}
}
$total_deleted += $deleted
$generation_rate = ($deleted / $DELAY) * 60
write-host (get-date), `
"total already deleted ", $total_deleted, `
" generation rate ", $generation_rate, " / minute"
Sleep -Seconds $DELAY
}
Voilà des exemples que j'aurais été bien incapable de réaliser en DOS, et qui sont très faciles à faire en PowerShell.
Et vous, quels sont les scripts qui vous simplifient la vie ?
#repository local
#La config de svn pointe par défaut sur l'URL adéquate
cd g:\ps\add-lib
#Récupère une partie des logs au format XML
svn log -r 76:111 --xml|Out-File -Encoding OEM g:\ps\temp\log.xml
$res=[xml](gc g:\ps\temp\log.xml)
#Extrait du document XML, les informations souhaités
$Res|foreach { $_.log.logentry }|% {$_.msg}| Out-File -Encoding default g:\ps\temp\log.txt
#Whatif n'effectue pas le traitement, mais le simule.
Dir *.bak|Select-String -Pattern ERROR -List -NotMatch|Del -whatif
Vous devez être identifié pour poster un commentaire.
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 |
Copyright © 2000-2012 - www.developpez.com