Question Troncage volontaire de sortie .

Plus d'informations
il y a 16 ans 2 mois #1675 par Laurent Dardenne
Salut,
sonic31 écrit:

sinon non je pense pas qu'il y ai un autre problème .

Personnellement je suis comme Spirit je ne suis pas certains d'avoir compris ce que tu souhaites réaliser comme traitement %-), cf. ton 1er post.

Et si je peux me permettre, prenez l'habitude de commenter votre code, indiquez ce que les lignes sont sensées faire. Je plains les personnes de la maintenance, voir les auteurs 6 mois après ;-)

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 2 mois #1681 par sonic
Réponse de sonic sur le sujet Re:Troncage volontaire de sortie .
:laugh:
Faut pas s'en faire pour ceux qui bosserons après moi dessus .L'original et non seulement commenté mais en plus il y a une doc on ne peu plus complète (SII oblige de toute facon ....).
Voici le code presque complet avec un début de commentaire non détaillé .(la version définitive sera plus détaillé . Je reprend ce que je voudrais en suivant :
[code:1]# Script de surveillance de repertoire .Si toutes option activé on detecte créations, modifications,suppressions et renomages.
# résultat envoyé par mail .

# Variable

# Fréquence en secondes
$tempo =10
# Défintion du repertoire a surveiller
$rep =\"c:\reasurveille\Journaux\"
# Prise de date de depart
$derniercheck = get-date
# Scan des fichier pour le premier lancement
$ancien = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}
# Initialisation du fichier log
$trace =\"VRAI\"
$fichier_log = \"C:\APPL\admin\repsurveille.log\"
# Fichier temporaire de construction du mail .
$ficok=\"C:\APPL\admin\ok.txt\"
# Variables pour le mail
$mail_desti= \" toto@tutu.fr\"
$mail_pass_smtp=\"srvsmtp\"
$mail_from=\"lili@lulu.fr\"
$cc=$nul
$bcc=$nul

# Debut du script
\"DEPART\" >> $fichier_log

# Boucle infini
while ($derniercheck -ne $null)
{
start-sleep -s $tempo
# Prise de image pour comparaison
echo \"Itération du:\" >> $fichier_log
get-date >> $fichier_log
\"Photo des repertoires\" >> $fichier_log
$actuel = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}
get-date >> $fichier_log

# Traitement pour les fichiers modifiés

\"fichiers modifiés\" >> $fichier_log
$a=$actuel |where {($_.lastwritetime -gt $derniercheck)-and($_.creationtime -lt $derniercheck)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
get-date >> $fichier_log

# Traitement pour les fichiers créés.

\"fichiers crees\" >> $fichier_log
$b=$actuel |where {($_.creationtime -gt $derniercheck)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
get-date >> $fichier_log

# Traitement pour les fichiers renomés .Très consomateur de ressources donc pas activé dans tous les cas (jusqua 1000 fichiers max)

# \"fichiers renomés\"
# $c=$actuel | where {(($ancien | foreach {$_.name}) -notcontains $_.name)-and ($_.creationtime -lt $derniercheck)}|
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
# get-date

#Traitement pour les fichiers supprimés.Très consomateur de ressource donc pas activé dans tous les cas (jusqua 1000 fichiers max)

# \"fichiers supprimés\"
# $d=$ancien |where {((get-childitem $rep -r $_) -eq $null)} |
format-table Lastwritetime, Length, name, directoryname -autosize -hideTableHeaders
# get-date

if ($trace -eq \"VRAI\"«»)
{
# echo \"Les variables : a($a) b($b) c($c) d($d)\" >> $fichier_log
}

# Ici on détecte si une variable contient quelque chose . Si oui on fabrique et envois le mail

$test=$a,$b,$c,$d

if ($test -ne $nul)
{
# Envoi du contenu des variable dans fichier a cause du problème de format. (trouver une solution plus propre)
$a | out-file \"C:\APPL\admin\at.txt\" -width 9999
$b | out-file \"C:\APPL\admin\bt.txt\" -width 9999
# $c | out-file \"C:\APPL\admin\ct.txt\" -width 9999
# $d | out-file \"C:\APPL\admin\dt.txt\" -width 9999

# Import dans variable

$fmod= get-content \"C:\APPL\admin\DCMAGRI\at.txt\"
$fcre= get-content \"C:\APPL\admin\bt.txt\"
# $freno= get-content \"C:\APPL\admin\ct.txt\"
# $fsupp= get-content \"C:\APPL\admin\dt.txt\"

# Fabrication du mail
\" \" > $ficok
\"Rapport des modifications\" >> $ficok
\"Le format est: date, HH:MM:«»SS, taille, nom, chemin.\" >> $ficok
\" \" >> $ficok
\"Fichies modifies:\" >>$ficok
$fmod >> $ficok
\" \" >> $ficok
\"Fichier créés:\" >> $ficok
$fcre >> $ficok
\" \" >> $ficok
# \"fichier remonés:\" >> $ficok
# $freno >> $ficok
# \" \" >> $ficok
# \"Fichier suprimés:\" >> $ficok
# $fsupp >> $ficok
$body= \"=============================\" + \"`r`n\" + \"Ne répondez pas a ce mail.\" + \"`r`n\" + \"=============================\"
$bodya = get-content $ficok
# Ajout d'espaces dans le mail sinon tout est en ligne !!!!!! currieu !!!!
Foreach ($bodyok in $bodya)
{
$body = $body + \"`r`n $bodyok\"
}

$body= $body + \"`r`n\" + \"`r`n\" + \"=======================================================\" + \"`r`n\" + \"En cas de problème,contactez xxxxxxxx

function sendmail([string] $body)
{
$objet = \"Alerte modification \" + [System.DateTime]::Now
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = $mail_pass_smtp
$mailmessage.from = \"$mail_from\"
$mailmessage.To.add(\"$mail_desti\"«»)
#$mailmessage.CC.add(\"$cc\"«»)
#$mailmessage.BCC.add(\"$bcc\"«»)
$mailmessage.Subject = \"$objet\"
$MailMessage.IsBodyHtml = $False
$mailmessage.Body = $body
$smtpclient.Send($mailmessage)
}
sendmail($body)

if ($trace -eq \"VRAI\"«»)
{
echo \"body($body)\" >> $fichier_log
echo \" \" >> $fichier_log
}
}
# Sauvegarde etat pour prochaine itération
$ancien = $actuel
$derniercheck = get-date

echo \"fin Itération.\" >> $fichier_log
echo \"####################################################\" >> $fichier_log

}

[/code:1]<br><br>Message édité par: sonic31, à: 15/02/08 12:33

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

Plus d'informations
il y a 16 ans 2 mois #1682 par Lemaire Patrice
BatchMan écrit:

Et si je peux me permettre, prenez l'habitude de commenter votre code, indiquez ce que les lignes sont sensées faire. Je plains les personnes de la maintenance, voir les auteurs 6 mois après ;-)

Je me demande si il ne faudrait pas le marteler dès l'école ^^.
Et tant que vous y ètes, découpez vos lignes trop longues pour qu'elles tiennent sur un ecran. Le caractère ALTGR+7 est votre ami.
Et puis indentez(Par Tab par exemple) vos blocs de code.
Et puis ... Hum bon ok j'arrete ^^.

Sinon pour ton probleme Sonic, je pense que si tu retirait le mot \&quot;name\&quot; qui est juste avant le \&quot;@{\&quot; du Format-Table sa irait drolement mieux. Ceci dit, sur un ligne qui dépasse 4 fois l'écran je comprend que tu ai louper ca ^^ (et hop une tit couche en plus ;p).

Essaye un truc du genre :

[code:1]
$a=$actuel | where-object {($_.lastwritetime -gt $derniercheck
-and($_.creationtime -lt $derniercheck)} `
| format-table Lastwritetime, Length, `
@{label=\&quot;partofdirectoryname\&quot;; `
expression={$_.DirectoryName.substring($_.DirectoryName.lastindexof(\&quot;\\&quot;«»)+1)}} `
-autosize -hideTableHeaders[/code:1]
Et encore on doit pouvoir faire mieux , mais bon ....

PS : Ah oui j'oubliait, évitez les Alias dans les Scripts , préfère Where-Object à where, conseil de routard ....

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

Plus d'informations
il y a 16 ans 2 mois #1683 par sonic
Réponse de sonic sur le sujet Re:Troncage volontaire de sortie .
Oui oui super mais bon je voudrais préciser que c'est mon premier script en powershell (quelque un, très peu en .bat)j'ai a peine effleuré VBS quelques jours) , je connais donc pas les langage objet ni le développements de programme ou script sérieux. C'est ma première utilisation de ce type de langage tout est nouveau pour moi . Ça doit faire quelque semaine (3/4 maxi) que j'utilise powershell . Alors je prend tout les conseils , les remarques mais bon pour le coup ça fait vraiment beaucoup en peu de temps ;) . C'était juste pour expliquer car je prend tous les conseils sans exceptions avec plaisir .
Heu ... pour l'indentation faut que je m'habitue a faire plus !!! j'ai jamais eu vraiment d'occasion de pratiquer . Sauf que maintenant ca risque de changer .
Je vais tester tout ca .

Merci pour tout ca je repasse des que testé . ;)

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

Plus d'informations
il y a 16 ans 2 mois #1685 par Laurent Dardenne
Spirit écrit:

Et puis ... Hum bon ok j'arrete ^^.

Pourtant cela serait intéressant de trouver sur ce site des préconisations d'écriture de script sous PS...

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 2 mois #1692 par sonic
Réponse de sonic sur le sujet Re:Troncage volontaire de sortie .
Bonjour,

Oui c'est vrai !!!

Tout fonctionne comme je le voulais . ;)
Encore merci à tous .

Je publierais le tout dans le post d'origine (surveillance de répertoire + mail) .
Je vais déjà réfléchir a mon 2 ieme script en PS ....

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

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