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 :

Recherche de plusieurs valeurs [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Recherche de plusieurs valeurs
    Bonjour a tous et a toutes,


    J'ai besoin d'aider pour quelque chose qui me semblait assez simple pourtant, mais sur lequel je bloque complètement finalement.

    Alors, je vous explique un peu, je cherche à faire un contrôle dans plusieurs fichiers txt présent dans un dossier. Ce contrôle je recherche deux valeurs afin de savoir si mes traitements se sont bien déroulés.. mais ça ne fonctionne pas



    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    cls
    $Path = (get-location).path
    $Rep = (Get-ChildItem "$Path\Data\" | -Recurse -Include *.txt)
    $date=(get-date)
    $StartScript = (Get-Date)
    function Log {
        param([string]$Message)
        Write-Host ((Get-Date -Format "dd/MM/yyyy - hh:mm ") + "$0 - " + $Message)
    }
    #Debut
    log -Message "======================================="
    log -Message "Debut du script le $date"
    log -Message "======================================="
    log -Message ""
     
    foreach ($Fichier in $Rep){
        if ((Get-Content $Fichier) -like "Chargement réussi de * Lignes." -or "Validation effectuée." ){
            log -Message "C'est Ok" -fore Green
        }else{
            log -Message "C'est HS" -back RED
        }
    }
     
    #Fin
    $FinScript = (Get-Date)
    $Time = "La durée du scrip a pris : $(($FinScript-$StartScript).totalminutes) minutes"
    log -Message "$Time." -fore Green -back black


    Merci par avance

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    tu as qq soucis dans la construction d'appel et l'usage de l'opérateur :
    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
    15
    16
    17
    18
    19
    20
    21
     
     @('AA','BB') -like "CC" -or 'DD'
    #true
     
    $null -or 'DD'
    #true
     
    'dd' -or 'aa'
    #true
     
    'dd' -as [boolean]
    #true
     
    @('AA','AA','BB') -like "AA"
    #AA
    #AA
     
    @('AA','AA','BB')|Foreach {$_ -like 'AA'}
    #True
    #True
    #False
    Powershell a des conventions de conversion spécifique.

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Avec match

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    if (((Get-Content $Fichier) -match "Chargement réussi de .* Lignes\.|Validation effectuée\.").Count -ne 0){

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Tout d'abord merci pour vos réponses.
    Citation Envoyé par ericlm128 Voir le message
    Avec match

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    if (((Get-Content $Fichier) -match "Chargement réussi de .* Lignes\.|Validation effectuée\.").Count -ne 0){
    J'ai essayé avec ta ligne mais le résultat n'est pas correcte même dans des fichier ou un des deux valeurs est présente ça me dit que c'est OK
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    cls
    $Path = (get-location).path
    #$Rep = (Get-ChildItem "$Path\Data\" | -Recurse -Include *.txt)
    $Rep = (Get-ChildItem "$Path\fichiers\" -Recurse -Include *.txt)
    $date=(get-date)
    $StartScript = (Get-Date)
    function Log {
        param([string]$Message)
        Write-Host ((Get-Date -Format "dd/MM/yyyy - hh:mm ") + "$0 - " + $Message)
    }
    #Debut
    log -Message "======================================="
    log -Message "Debut du script le $date"
    log -Message "======================================="
    log -Message ""
     
    foreach ($Fichier in $Rep){
        if (((Get-Content $Fichier) -match "Chargement réussi de .* Lignes\.|Validation effectuée\.").Count -ne 0){
            log -Message "C'est Ok : $Fichier" #-fore Green
        }else{
            log -Message "C'est HS" #-back RED
        }
    }
     
    #Fin
    $FinScript = (Get-Date)
    $Time = "La durée du scrip a pris : $(($FinScript-$StartScript).totalminutes) minutes"
    log -Message "$Time." -fore Green -back black




    Citation Envoyé par Laurent Dardenne Voir le message
    Salut,
    tu as qq soucis dans la construction d'appel et l'usage de l'opérateur :
    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
    15
    16
    17
    18
    19
    20
    21
     
     @('AA','BB') -like "CC" -or 'DD'
    #true
     
    $null -or 'DD'
    #true
     
    'dd' -or 'aa'
    #true
     
    'dd' -as [boolean]
    #true
     
    @('AA','AA','BB') -like "AA"
    #AA
    #AA
     
    @('AA','AA','BB')|Foreach {$_ -like 'AA'}
    #True
    #True
    #False
    Powershell a des conventions de conversion spécifique.

    Dans tes commande la ligne : @('AA','AA','BB') représente mes fichiers ?

    Désolé je débute un peu en powershell j'essayé d'apprendre tout seul ^^

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2017
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Après plusieurs essaies.. et une longue réflexion.. j'ai compris mon erreur et résolu mon problème..

    Il fallait tout simplement écrire :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var = (Get-Content $Fichier)
    if (($var -match "Validation effectuée.") -or ($var -match "Chargement réussi de .* Lignes.")){

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Une petite erreur s'est glissé dans mon code

    La solution est plus simple que prévus :

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((Get-Content $Fichier) -match "Chargement réussi de .* Lignes\.|Validation effectuée\."){

    Attention tes deux pattern, Validation effectuée. et Chargement réussi de .* Lignes., ne correspondent pas à ce que tu souhaites.
    Le point étant un métacaractère, il faut l’échapper avec un \ pour sa considération littérale par Match.

    Code de test :
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    $var = @"
    bla
    "@
    $var -match "Chargement réussi de .* Lignes\.|Validation effectuée\."
    # False
     
    $var = @"
    bla
    Chargement réussi de 60 Lignes.
    "@
    $var -match "Chargement réussi de .* Lignes\.|Validation effectuée\."
    # True
     
    $var = @"
    bla
    Validation effectuée.
    "@
    $var -match "Chargement réussi de .* Lignes\.|Validation effectuée\."
    # True
     
    $var = @"
    bla
    Validation effectuée.
    Chargement réussi de 60 Lignes.
    "@
    $var -match "Chargement réussi de .* Lignes\.|Validation effectuée\."
    # True

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par PierreG16 Voir le message
    Dans tes commande la ligne : @('AA','AA','BB') représente mes fichiers ?
    Pas vraiment, le contenu d'un fichier, c'est à dire des chaînes de caractères.
    Ici @('AA','AA','BB') construit un tableau de chaîne , comme le fait $Lignes=get-content NomFichier

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

Discussions similaires

  1. recherche de plusieurs valeur avec condition vba + msgbox
    Par nicolas59200 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/03/2018, 18h14
  2. [AC-2013] Recherche de plusieurs valeurs dans un seul champ d'une table de jonction
    Par Vijinn dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 12/09/2017, 11h33
  3. [XL-2010] Recherche de plusieurs valeurs
    Par philmire dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/12/2013, 18h03
  4. Rechercher si plusieurs valeurs sont présentes dans une piece
    Par progscoubi dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 31/07/2013, 14h33
  5. Recherche de plusieurs valeurs
    Par effaness dans le forum Excel
    Réponses: 1
    Dernier message: 19/06/2007, 10h07

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