IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Analyse d'une liste de logs .txt et extraction du nom du log si condition respectée [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut Analyse d'une liste de logs .txt et extraction du nom du log si condition respectée
    Bonjour à tous,

    Avant de commencer, je vous souhaite à tous une bonne et heureuse année 2022.

    J'ai un programme qui tourne sur plusieurs machines et m'envoie des logs par mail sous forme d'un fichier txt.
    Tous ces logs sont extraits et enregistrés dans un dossier sur lequel je souhaite exécuter un script pour vérifier deux variables.

    Ci dessous l'extrait du log avec les deux variables en question:

    "vulnerable_file_count": 1,
    "potentially_vulnerable_file_count": 0,
    J'essaie via un script powershell d'extraire ces deux variables et rencontre quelques difficultés.
    Lorsque je fais un echo de ma variable, j'ai plusieurs retour chariot dont je n'arrive pas à me débarrasser, ce qui m’empêche d'exécuter la suite de mon script.

    Ci dessous le code concerné

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $invocation = (Get-Variable MyInvocation).Value
    $directorypath = Split-Path $invocation.MyCommand.Path
    $settingspath = $directorypath + '\*.txt'
     
    # retrieve variables from a file
    $rapport = get-content $settingspath
    $var1 = $rapport | select-string '"vulnerable_file_count"' | %{$_.line.split(': ')}
    $vulnerable_file_count = $var1 -replace '"vulnerable_file_count"','' -replace ':','' -replace ',',''
    $var2 = $rapport | select-string '"potentially_vulnerable_file_count"' | %{$_.line.split(': ')}
    $potentially_vulnerable_file_count = $var2 -replace '"potentially_vulnerable_file_count"','' -replace ':','' -replace ',',''

    Mon deuxième soucis est de récupérer le nom des fichiers de log pour lesquels mes variables auraient les valeurs souhaitées et là je ne sais comment faire.

    Je vous remercie par avance pour l'aide que vous pourrez m'apporter.
    Fabrice.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ceci devrait t'aider
    En supposant qu'il n'y a pas de séparateur de milliers (espace, virgule ou autres)

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $invocation = (Get-Variable MyInvocation).Value
    $directorypath = Split-Path $invocation.MyCommand.Path
    $settingspath = $directorypath + '\*.txt'
     
    $result = Select-String -Path $settingspath -Pattern '"(vulnerable_file_count|potentially_vulnerable_file_count)": (\d+)' | Select-Object @{label='Filename';expression={$_.Filename}}, @{label='Variable';expression={$_.matches.groups[1]}},  @{label='Value';expression={$_.matches.groups[2]}}
     
    $result

    Résultat sur mes 3 fichiers texte de tests
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Filename                    Variable                          Value
    --------                    --------                          -----
    Nouveau document texte1.txt vulnerable_file_count             0    
    Nouveau document texte1.txt potentially_vulnerable_file_count 1    
    Nouveau document texte2.txt vulnerable_file_count             2    
    Nouveau document texte2.txt potentially_vulnerable_file_count 3    
    Nouveau document texte3.txt vulnerable_file_count             4    
    Nouveau document texte3.txt potentially_vulnerable_file_count 5

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je viens de voir que $result est de type MatchInfo et je n'aime pas trop cela
    Voici donc une autre proposition

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $invocation = (Get-Variable MyInvocation).Value
    $directorypath = Split-Path $invocation.MyCommand.Path
    $settingspath = $directorypath + '\*.txt'
     
    $result = Select-String -Path $settingspath -Pattern '"(vulnerable_file_count|potentially_vulnerable_file_count)": (\d+)' | ForEach-Object {
        [PSCustomObject]@{
            Filename = $_.Filename
            Variable = $_.matches.groups[1]
            Value    = $_.matches.groups[2]
        }
    }
     
    $result

  4. #4
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Bonjour Ericlm 128,

    Je viens de tester ta seconde proposition, qui marche parfaitement.
    Mon Analyse des logs et de ce fait plus rapide. Merci!

    Toutefois j'aimerais apporter un complément et je ne vois pas comment faire.

    Je souhaiterais que seules les variables dont la Value est différente de 0 n'apparaissent dans le $result, mais je ne vois pas comment faire de test sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Value    = $_.matches.groups[2]

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Flûte ! Variable et Value sont des types System.Text.RegularExpressions.Group. Voici la dernière correction, tu ne devrais plus être embêté

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $invocation = (Get-Variable MyInvocation).Value
    $directorypath = Split-Path $invocation.MyCommand.Path
    $settingspath = $directorypath + '\*.txt'
     
    $result = Select-String -Path $settingspath -Pattern '"(vulnerable_file_count|potentially_vulnerable_file_count)": (\d+)' | ForEach-Object {
        [PSCustomObject]@{
            Filename = $_.Filename
            Variable = $_.matches.groups[1].Value
            Value    = $_.matches.groups[2].Value
        }
    }
     
    $filterResult = $result | Where-Object {$_.Value -ne "0"}
    $filterResult

  6. #6
    Membre confirmé Avatar de fabrice.s
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 120
    Par défaut
    Absolument Parfait!

    Un grand Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 22
    Dernier message: 18/06/2008, 19h01
  2. vider une liste de fichiers log
    Par beheretxea dans le forum Administration système
    Réponses: 8
    Dernier message: 28/05/2008, 09h26
  3. Extraction d'un fichier .txt vers une liste + random
    Par fontelouis dans le forum Pascal
    Réponses: 5
    Dernier message: 23/04/2008, 14h37
  4. faire une liste a partir de deux fichiers txt
    Par finelady dans le forum SL & STL
    Réponses: 4
    Dernier message: 15/04/2008, 10h39
  5. Envoyer des mails à parti d'une liste en .txt
    Par twister_95 dans le forum Internet
    Réponses: 5
    Dernier message: 18/07/2007, 22h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo