Question
Eventlog
- balek
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 71
- Remerciements reçus 0
J'avoue elle est un peu tirée par les cheveux et j'ai pioché dans des scripts trouvés avec mon pote google.
Le but est :
- de sauvegarder tous les 7 jours le fichiers d'evenement security afin d'avoir une retention d'un an des ces fichiers.
Le script va sauvegarder le fichier evt, le zipper, puis le supprimer le fichier exporté. Enfin, il nettoyera le journal d'evenement. Il se lancera dans une tache planifiée une fois par semaine.
[code:1]$day=(Get-Date).day
$month=(Get-Date).month
$year=(Get-Date).year
$sec=gwmi \"Win32_NTEventLogFile WHERE LogFileName='security'\"
function New-Zip
{
param([string]$zipfilename)
set-content $zipfilename (\"PK\" + [char]5 + [char]6 + (\"$([char]0)\" * 18))
(dir $zipfilename).IsReadOnly = $false
}
function Add-Zip
{
param([string]$zipfilename)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename (\"PK\" + [char]5 + [char]6 + (\"$([char]0)\" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}
$sec.PSBase.Scope.Options.EnablePrivileges = $true
$sec.BackupEventlog(\"C:\temp\sec$day$month$year.evt\"«»)
dir C:\temp\sec$day$month$year.evt | Add-zip C:\temp\sec$day$month$year.zip
$syslog = New-Object -TypeName System.Diagnostics.EventLog -argumentlist security
$syslog.clear()
Remove-Item C:\temp\sec$day$month$year.evt
[/code:1]
La partie avec l'incrementation de la date est vraiment limite mais bon ca marche.
@+<br><br>Message édité par: balek, à: 10/01/08 17:02
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
$journal[0].
J'ai beaucoup de mal a avoir le reflexe d'utiliser cette ecriture. Je ne suis pas programeur mais j'ai compris plus ou moins l'utilisation.
Appelle t on cela un fonction ? un argument ?
On appelle simplement cela un tableau. Où plus exactement une variable de type tableau. Regarde :
[code:1]PS > $journal.gettype()
IsPublic IsSerial Name BaseType
----
True True Object[] System.Array[/code:1]
Si j'ai bien saisi $journal[0] c'est le journal appli, [1] le security ... etc.
Pas exactement, regarde :
[code:1]PS C:\> $journal = Get-WmiObject Win32_NTEventLogFile
PS C:\> $journal | ft -auto
FileSize LogfileName Name NumberOfRecords
----
65536 Application C:\WINDOWS\system32\config\AppEvent.Evt 149
65536 Directory Service C:\WINDOWS\system32\config\NTDS.Evt 110
65536 DNS Server C:\WINDOWS\system32\config\DnsEvent.Evt 14
65536 File Replication Service C:\WINDOWS\system32\config\NtFrs.Evt 25
65536 Internet Explorer C:\WINDOWS\System32\Config\Internet Explorer.evt 0
6225920 Security C:\WINDOWS\System32\config\SecEvent.Evt 13080
327680 System C:\WINDOWS\system32\config\SysEvent.Evt 844
196608 Windows PowerShell C:\WINDOWS\System32\config\WindowsPowerShell.evt 195
[/code:1]
En l'occurence, le journal Securité se trouve à l'index 5 (on compte à partir de 0). Cela dépend de l'OS de la machine. Certaines fois il y a d'autres journaux, par conséquent l'index peut changer.
Le mieux est de faire comme tu as fait : [code:1]$sec=gwmi \"Win32_NTEventLogFile WHERE LogFileName='security'\"[/code:1]
C'est plus propre et également plus performant car la requête est plus sélective.
Sinon pour ton problème d'accès, c'est à mon avis propre au journal Sécurité. En effet, son accès est un peu particulier justement à cause qu'il contient des informations sensibles.
Arnaud
MVP PowerShell et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-

Juste quelques petites remarques :
- Génération du nom de fichier: pour améliorer la lisibilité de ton code, il serait mieux de créer une variable $nomdefichier plutôt que de réutiliser la forme $day$month$year
- Dir : préférer plutôt Get-Childitem ou gci, car Dir est une commande héritée de CMD
- Tu pourrais améliorer ton script en lui donnant la possibilité de recevoir un paramètre (Voir post sur PARAM). Ce paramètre serait le nom et le chemin du fichier de l'archive.
Arnaud
MVP PowerShell et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Si tu as aussi des liens interressant ou des livres à me conseiller( qui plus est en francais, mais faut pas rever), je serais vivement intéressé.
Nous avons sur le site la rubrique Liens, qui recueille tous les liens que nous jugeons intéressants. Mais si tu en trouves d'autres que nous ne connaissons pas nous sommes aussi preneurs !
Pour ce qui est d'un livre, nous ne pouvons que te conseiller le nôtre

@++
Arnaud<br><br>Message édité par: Arnaud, à: 10/01/08 18:33
MVP PowerShell et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Connexion ou Créer un compte pour participer à la conversation.
- balek
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 71
- Remerciements reçus 0
Je vais suivre tes conseils et ameilorer ce script.
OK pour tes deux premieres remarques, facile a faire, mais pourrais tu m'aider un peu pour les PARAM voir pour utiliser une \"function\" simple .
Ca me permettrais de les utiliser au mieux.
Bonne journée.<br><br>Message édité par: balek, à: 11/01/08 13:34
Connexion ou Créer un compte pour participer à la conversation.
- balek
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 71
- Remerciements reçus 0
je voudrais sauvegarder des eventlog a distance et la rapatrier sur un autre serveur.
J'ai l'impression que la commande ne peux pas fonctionner car powershell n'est pas present sur les serveurs pour lesquels je veux les fichiers evt.
Est ce une impression ou faut il vraiment que powersehll soit installé sur le serveur cible.
Tous cela dans la commande :
[code:1]$day=(Get-Date).day
$month=(Get-Date).month
$year=(Get-Date).year
$srv=\"srv004\"
$nameoffile=\"security $srv $day $month $year\"
$path=\"c:\temp\\"
$evtfolder=\"\\srv005\d$\save-events\\"
#definition variable du journal security
$sec=gwmi \"Win32_NTEventLogFile WHERE LogFileName='security'\" -computername $srv
$sec.PSBase.Scope.Options.EnablePrivileges = $true
$sec.BackupEventlog(\"$evtfolder$nameoffile.evt\"«»)[/code:1]
Je lance le script depuis srv005 (ou il y a powershell) et je veux recuperer l'evt security du srv004 ou il n'y a pas powershell.
J'ai tenté dans l'autre sens et ca fonctionne bien.
Y a t il une solution ?
Merci par avance.
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Eventlog