none
probleme avec la fonction new-timespan dans un script gestion des audit de fichiers RRS feed

  • Question

  • Bonjour,

    Je m'excuse par avance pour mes lacunes en scripting.

    J'ai besoin de rendre plus lisible les journaux d’événement suite a la mise en place de l'audit de fichiers sur windows serveur 2019.

    J'utilise le script suivant : https://gallery.technet.microsoft.com/scriptcenter/How-to-audit-changed-39afba72

    Ca fonctionne bien sauf que ca n'exporte pas en csv/html.

    J'ai regardé avec powershell ISE pour voir l'erreur et le retour que j'ai est  :

    New-TimeSpan : Impossible de lier le paramètre « Start » à la cible. Exception lors de la définition de « Start » : « Impossible de convertir la valeur Null en type « System.DateTime ». »
    Au caractère C:\Event_Logs\Functions.ps1:51 : 44
    +         $TimeSpan = -((New-TimeSpan -Start $Time -End $Pending_Delete ...
    +                                            ~~~~~
        + CategoryInfo          : WriteError: (:) [New-TimeSpan], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.NewTimeSpanCommand

    N'étant vraiment pas bon en development, pourriez vous m'indiquer comment remédier a ce problème?

    Merci par avance.

    Sébastien.



    jeudi 10 septembre 2020 07:20

Réponses

Toutes les réponses

  • C'est bon tout fonctionne, il ne s'agissait que d'une erreur de ma part concernant l'emplacement des fichiers.

    Mea Culpa


    sebastien

    • Marqué comme réponse sebastien_P jeudi 10 septembre 2020 10:55
    jeudi 10 septembre 2020 10:55
  • bonjour Sebastien_P

    Je devrais te dire "pose ta question directement au développeur dudit script sur PS Gallery", mais bon, j'ai récup les dits sripts (les 3 fichiers .ps1)

    Monitor-File-server-activity.ps1

    Ligne 17 : Clear-Eventlog "Security". WTF ! C'est quoi ce script qui se permet de vider le journal sécurité et qui plus est sans me le dire ?

    passons, il fait sa query dans le journal de sécurité puis utilise ces propres fonctions (pas de pb) pour faire toussa toussa

    Le pb (merci pour la capture) vient de la ligne 51 de fonctions.ps1, donc de la fonction Cleanup.

    d'ailleurs dans le script principal il écrit en commentaire : # Flush out the list of deleted items (improbable in production at 11:45pm, but was an issue when testing the script)

    Son truc n'est pas opérationnel tel quel. Je le testerais pas, même dans mon lab, car je ne veux pas purger mon journal de sécurité.

    Quand tu écris : "Ca fonctionne bien sauf que ca n'exporte pas en csv/html." ==> Donc ça ne fonctionne pas :-)

    Je te propose de faire juste ceci, dans un premier temps. Lis, c'est commenté, et aucun risque.

     # Nombre de jours à scruter dans l'event log
     $Periode = 1
     
     $EndTime = Get-Date # Maintenant
     $StartTime = (Get-Date).AddDays(-$Periode) # maintenant -$Periode
     
     # La hashtable à appliquer.
     $MyFilter = @{LogName="security"
                   ID=4656,4659,4660,4663 # les IDs que tu cherches
                   StartTime = $StartTime # le passé
                   EndTime = $EndTime     # maintenant
                   }
    
    $MesEvents = Get-WinEvent -FilterHashTable $MyFilter
    <#
    Get-WinEvent -FilterHashTable $MyFilter
    

    Maintenant regarde le contenu de $MesEvents. Juste en tapant $Mesevents dans la console.

    C'est ce que tu cherches exactement ? ... sinon on affine.

    Bon maintenant que tu as ta collection d'objets (oui c'est une collection d'objets), va falloir penser à sortir tout ça dans un .csv, html ...

    # Nom des fichiers d'export
    # $PSCriptRoot est le path ou est lancé le script. Donc peut importe ou est le script, le rapport cela dans le même dossier
    $CSVExportFile = "$PSScriptRoot\Sec-Event-du-$(Get-Date -f "dd-MM-yyyy").csv"
    $HTMLExportFile = "$PSScriptRoot\Sec-Event-du-$(Get-Date -f "dd-MM-yyyy").html"
    # Export en .csv
    $MesEvents | Export-Csv -Path $CSVExportFile -Encoding UTF8 -NoTypeInformation -Delimiter ";"
    # Export en .html
    $MesEvents | ConvertTo-Html ... | Out-File -FilePath $HTMLExportFile

    Jusque là, tu suis ? Pas trop difficile tu vois... sans les commentaires on doit arriver péniblement à 10 lignes.

    OK je reconnais, pour la sortie Html j'ai pas finalisé, il n'y a pas de feuille de style (les couleurs et tout et tout).

    Alors regarde ici (qui a dit que je faisais ma pub ? Non j'explique au gentil Monsieur)

    Ce qu'il faut que tu retiennes :

    • Ne jamais exécuter un script sans comprendre ce qu'il fait (désolé, mais le clear du journal de sécurité me reste en travers) mais ça peut inspirer sur comment s'y prendre
    • Voir d'autres exemples. Le lien que je t'ai mis te donne quelques exemples (c'est plus un mémo pour moi que pour le reste de la terre, mais il est sur un espace public alors autant que cela serve). Prends et adaptes.
    • Fais par toi-même suivant cette démarche
    1. mise au point de la (les) cmdlets à passer pour obtenir ce que tu cherches. Juste sur une machine
    2. Intégration du point 1 dans une boucle foreach pour un traitement de masse (pas ton cas)
    3. Ajout de la gestion des erreurs : là, ça peut devenir plus hardu. Une piste : Try ... Catch
    4. Ajout du logging de ton script (conseil : module PS EZLog, le plus simple et le plus efficace que j'ai pu tester. Sortie en console et en fichier avec une seule et unique cmdlet. Elégant et efficace pour les feignants comme moi)
    5. Tester (pas oublier -WhatIf si ce que tu fais modifie quoi que ce soit). On teste, on ne casse pas :-)

    Tu vas pouvoir faire par toi-même, tout seul comme un grand. C'est quand même plus valorisant. Bien entendu, ce qui est décrit sur le Script Center concernant concernant l'activation de l'audit de tel ou tel type d'évent, dans le principe reste valable (pour peu que cela soit exactement ce que tu veux logguer). Attention à la taille de ton journal, il doit être bien dimensionné.

    Voilà, tu as des billes maintenant pour faire.

    Cordialement

    Olivier

    jeudi 10 septembre 2020 11:35