Question Surveillance répertoire et sous repertoires + mail

Plus d'informations
il y a 16 ans 1 mois #1612 par sonic
Bon ben merci bien, mais j'ai encore bien du mal à cerner WMI pour mon utilisation, il vat bien falloir pourtant .
Sinon concernant le livre ca tombe bien puisque je cherche des livres à aquerir (c'est ma boite qui régale :laugh: ) pour accélérer ma formation sur powershell et accessoirement WMI . Entre les certifications microsoft et powershell ca va commencer à etre délicat comme emplois du temps !!!!
PS: Ne faisant que des bat avant PS, Powershell est une vrai réolution pour moi , j'attend avec impatience la V2 ...

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

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

...
je cherche des livres à aquerir (c'est ma boite qui régale :laugh: ) pour accélérer ma formation sur powershell et accessoirement WMI.

Pour WMI celui-ci est trés bien, \" Understanding WMI scripting \" en 2 volumes. Très fouillé, couvre Windows Server 2003, mais utilise le VBS :S

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 mois #1614 par sonic
Alors la je crois que je vien de tomber sur un big problème ......
Mon script ci dessus, version sans WMI fonctionne très bien sauf avec excel et word . Pour word le problème est que des que quelqu'un consulte le fichier il modifie la date de modification du répertoire (certainement a cause du fichier temporaire créé pas word) qui du coup remonte en modification . Ca, je pense le solutionner en excluant les repertoires des le get-childitem . Pour excel la je ne vois aucune solution et pour cause ....
Quand on ouvre un excel, il modifie la date de modification du \"FICHIER\" le temps qu'il reste ouvert. Il le remet a l'ancienne date des qu'on le ferme (si pas de modif) . J'ai cru réver mais non ca semble bien etre ca aussi incroyable que ca paraisse !!!. Qu'il y ai modification ou pas .Du coup j'envois un message des qu'il y a une consultation sans le vouloir . La solution qui fonctionne c'est de ne pas donner les droits de modification sur le fichier/repertoire mais comment faire dans le cas Des utilisateurs qui doivent pourvoir faire des modif ???
Je craind le pire :( .<br><br>Message édité par: sonic31, à: 4/02/08 12:53

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

Plus d'informations
il y a 16 ans 1 mois #1615 par sonic
Pour excel pas si grave que ca finalement, il suffit de cocher une case \&quot;ouverture en lecture seule conseillé\&quot; dans outils . Il faudra juste imposer ce paramètrage au utilisateur/créateur des fichiers . De toute facon apres avoir recu 4520000000000 messages ils le feront d'eux meme :lol: . Je vais voir pour word .

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

Plus d'informations
il y a 16 ans 1 mois #1617 par Laurent Dardenne
Verifie si ces events peuvent t'aider :
__InstanceCreationEvent
__InstanceDeletionEvent
__InstanceModificationEvent.


Avec WMI on connait l'instance avant l'événement et celle en cours :

The __InstanceModificationEvent class defines the following properties.

PreviousInstance
Data type: object
Access type: Read-only

Copy of the instance prior to modification.

cf msdn2.microsoft.com/en-us/library/aa394651.aspx

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 mois #1746 par sonic
Voici la dernière version .
Finalement j'ai filtré les répertoires .Je ne remonte plus que les fichiers, ce qui évite le souci de la détection quand quelqu'un ouvre un ficher dans un répertoire . J'ai aussi retaillé la largeur des données et tronqué la première partie du chemin des fichiers détectés. La première partie n'étant pas intéressante pour les utilisateurs .
A noté que :
C'est mon premier . Script de cette taille et mon premier en powershell . Je pratique powershell que depuis presque 2 mois et pas tout le temps .
95% de ce que j'ai appris vient de ce sites et je remercie donc tous ce qui mon aidé .
voici donc le dernier code en date :
[code:1]

# Duree de la tempo pour chaque vérifications en secondes
$tempo =10
# Mise en variable du repertoire a surveiller .
$rep =\&quot;D:\Services\aaa\ttt\&quot;
$trace =\&quot;VRAI\&quot;
# Variable fichier de log
$fichier_log = \&quot;C:\\admin\toto\repsurveille.log\&quot;
# Fichier de travail
$ficok=\&quot;C:\admin\toto\ok.txt\&quot;
$reptrv= \&quot;C:\APPL\admin\toto\&quot;
# Variable pour l'envois des mail.
$mail_desti= \&quot; toto@ert.fr\&quot;
$mail_pass_smtp=\&quot;srvsmptp\&quot;
$mail_from=\&quot;test@dcd.fr,\&quot;
$cc=$nul
$bcc=$nul
\&quot;DEPART\&quot; &gt;&gt; $fichier_log

# Prise de la premiere image des repertoires à surveiller . On liste les fichiers
# sans les repertoires .
$derniercheck = get-date
$ancien = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}

# Boucle infinit de traitement
while ($derniercheck -ne $null)
{
start-sleep -s $tempo
# Prise d'une nouvelle image pour une future comparaison avec l'ancienne .
echo \&quot;Itération du:\&quot; &gt;&gt; $fichier_log
get-date &gt;&gt; $fichier_log
\&quot;Photo des repertoires\&quot; &gt;&gt; $fichier_log
$actuel = get-childitem $rep -r |Where-Object {$_.PSIsContainer -eq 0}
get-date &gt;&gt; $fichier_log


\&quot;fichiers modifiés\&quot; &gt;&gt; $fichier_log
# pour avoir la taille ajouter ,Length,apres format-table

# Mise en variable des fichiers modifiés deduits en fonction des comparaisons ci dessous .
$a=$actuel | where-object {($_.lastwritetime -gt $derniercheck)`
-and($_.creationtime -lt $derniercheck)} `
| format-table Lastwritetime,name, `
@{label=\&quot;partofdirectoryname\&quot;; `
expression={$_.DirectoryName.substring($_.DirectoryName.lastindexof(\&quot;:\&quot;«»)+14)}} `
-autosize -hideTableHeaders
get-date &gt;&gt; $fichier_log


\&quot;fichiers crees\&quot; &gt;&gt; $fichier_log
# Mise en variable des fichiers cree deduits en fonction des comparaisons ci dessous .
$b=$actuel |where-object {($_.creationtime -gt $derniercheck)}`
| format-table Lastwritetime,name,`
@{label=\&quot;partofdirectoryname\&quot;; `
expression={$_.DirectoryName.substring($_.DirectoryName.lastindexof(\&quot;:\&quot;«»)+14)}} `
-autosize -hideTableHeaders
get-date &gt;&gt; $fichier_log



# \&quot;fichiers renomés\&quot;
# Mise en variable des fichiers renome deduits en fonction des comparaisons ci dessous .
# $c=$actuel | where-object {(($ancien | foreach {$_.name}) -notcontains $_.name)-and ($_.creationtime -lt $derniercheck)}`
# | format-table Lastwritetime,name,`
# @{label=\&quot;partofdirectoryname\&quot;; `
# expression={$_.DirectoryName.substring($_.DirectoryName.lastindexof(\&quot;:\&quot;«»)+14)}} `
# -autosize -hideTableHeaders
# get-date &gt;&gt; $fichier_log


# \&quot;fichiers supprimés\&quot;
# # Mise en variable des fichiers supprime deduits en fonction des comparaisons ci dessous .
# $d=$ancien |where-object {((get-childitem $rep -r $_) -eq $null)}`
# | format-table Lastwritetime,name,`
# @{label=\&quot;partofdirectoryname\&quot;; `
# expression={$_.DirectoryName.substring($_.DirectoryName.lastindexof(\&quot;:\&quot;«»)+14)}} `
# -autosize -hideTableHeaders
# get-date &gt;&gt; $fichier_log

# NB: Creation d'une propriete (voir apres \&quot;@{label\&quot; ) pour pouvoir choisir la partie du chemin
# que je voulais envoyer ici juste la derniere partie .( a partir du 14caractère apres les \&quot;:\&quot; .



# Ici on teste si une variable contient quelque chose . Si oui, on fabrique et envois le mail .
$test=$a,$b,$c,$d

if ($test -ne $nul)
{
# Ici envois le contenu des variables dans des fihiers .
$a | out-file \&quot;$reptrv\at.txt\&quot; -width 9999
$b | out-file \&quot;$reptrv\bt.txt\&quot; -width 9999
# $c | out-file \&quot;$reptrv\ct.txt\&quot; -width 9999
# $d | out-file \&quot;$reptrv\dt.txt\&quot; -width 9999

# Remplissage des nouvelles variables avec le contenu des fichiers .
$fmod= get-content \&quot;$reptrv\at.txt\&quot;
$fcre= get-content \&quot;$reptrv\bt.txt\&quot;
# $freno= get-content \&quot;$reptrv\ct.txt\&quot;
# $fsupp= get-content \&quot;$reptrv\dt.txt\&quot;
# Frabrication du corp du mail
\&quot; \&quot; &gt; $ficok
\&quot;Rapport des modifications\&quot; &gt;&gt; $ficok
\&quot;Le format est: date, HH:MM:«»SS, nom, chemin.\&quot; &gt;&gt; $ficok
\&quot; \&quot; &gt;&gt; $ficok
\&quot;Fichiers modifies:\&quot; &gt;&gt;$ficok
$fmod &gt;&gt; $ficok
\&quot; \&quot; &gt;&gt; $ficok
\&quot;Fichiers créés:\&quot; &gt;&gt; $ficok
$fcre &gt;&gt; $ficok
\&quot; \&quot; &gt;&gt; $ficok
# \&quot;Fichiers remonés:\&quot; &gt;&gt; $ficok
# $freno &gt;&gt; $ficok
# \&quot; \&quot; &gt;&gt; $ficok
# \&quot;Fichiers suprimés:\&quot; &gt;&gt; $ficok
# $fsupp &gt;&gt; $ficok

$body= \&quot;=============================\&quot; + \&quot;`r`n\&quot; + \&quot;Ne répondez pas a ce mail.\&quot; + \&quot;`r`n\&quot; + \&quot;=============================\&quot;
$bodya = get-content $ficok
# Ajout de retour a la ligne, a chaque lignes du corp du mail .
Foreach ($bodyok in $bodya)
{
$body = $body + \&quot;`r`n $bodyok\&quot;
}

$body= $body + \&quot;`r`n\&quot; + \&quot;`r`n\&quot; + \&quot;=======================================================\&quot; + \&quot;`r`n\&quot; + \&quot;En cas de problème,contactez l Equipe xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx aaa@ttt.fr\&quot;

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

if ($trace -eq \&quot;VRAI\&quot;«»)
{
echo \&quot;body($body)\&quot; &gt;&gt; $fichier_log
echo \&quot; \&quot; &gt;&gt; $fichier_log
}
}
# Stokage de la derniere situation pour iteration suivante .
$ancien = $actuel
$derniercheck = get-date

echo \&quot;fin Itération.\&quot; &gt;&gt; $fichier_log
echo \&quot;####################################################\&quot; &gt;&gt; $fichier_log

}[/code:1]

PS: C'est la version avec la détection des renomages et suppression pas activé .

Toute remarque est bien venu .
PS: L'indentation et pas au top mais j'ai pas eu le temps de la reprendre ;)
Prochaine modif prévu . Ajout automatique de destinataires pris dans un fichier texte .

a+<br><br>Message édité par: sonic31, à: 22/02/08 16:12

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

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