none
Regex pour extraire plusieurs mots sur une seule ligne RRS feed

  • Question

  • Bonjour à tous,

    Dans le but d'automatiser le plus certaines tâches d'administration, je souhaite passer par des scripts Powershell.
    Je ne comptes pas ré-inventer la roue, j'ai déjà trouvé ce que je souhaite sur internet.

    Le seul soucis, c'est que ces scripts utilisent des regex qui sont adaptés pour les résultats en anglais.

    Or, mes résultats sont en français.

    Je souhaite, dans un premier temps, automatiser la commande DCDIAG sur mes DC.

    J'ai trouvé un script mais, comme je l'expliquais, la regex n'est pas adaptée.

    Voici la phrase sur laquelle j'essayes d'obtenir certaines mots :

    ......................... Le test Intersite

              de domaine.net a réussi
    Je souhaiterai extraire le nom du test, et le résultat.
    En l'occurence ici : Intersite et réussi.

    $result | select-string -pattern '\. (.*) \b(réussi|échoué)\b (.*)' | foreach {
        $obj = @{
            TestName = $_.Matches.Groups[3].Value
            TestResult = $_.Matches.Groups[2].Value
            Entity = $_.Matches.Groups[1].Value
        }
    Voici le bout de script qui pose soucis.
    Le regex ne fonctionne pas, et j'étant pas expert en powershell, je ne sais même pas si le select-string -pattern est finalement adaptée pour ce que je souhaite faire.

    Pouvez vous m'aider svp ?

    Merci à vous


    • Modifié Speeedfan mercredi 13 novembre 2019 09:57
    mercredi 13 novembre 2019 08:20

Toutes les réponses

  • Bonjour,

    le pattern peut être utilisé plus facilement comme ceci :

    Get-Command | Out-File -FilePath .\Command.txt
    Select-String -Path .\Command.txt -Pattern 'Get', 'Set'  -NotMatch

    exemple 7 : https://docs.microsoft.com/fr-fr/powershell/module/Microsoft.PowerShell.Utility/Select-String?view=powershell-5.1&redirectedfrom=MSDN

    Olivier.

    jeudi 14 novembre 2019 11:12
  • Bonjour,

    cette réponse vous suffit elle ? 

    Si oui, n'hésitez pas à clore le thread en marquant la reponse, et en votant pour les postes utiles.

    Olivier.

    vendredi 15 novembre 2019 19:27
  • Bonjour,

    J'ai fais ca récemment justement.

    Voici le resultat

    function Invoke-DcDiag {
        param(
            [Parameter(Mandatory)]
            [ValidateNotNullOrEmpty()]
            [string]$DomainController
        )
        $command = dcdiag.exe /s:$DomainController
        $result=@()
        #Cette ligne est nécessaire pour que l'éxécution du script fonctionne dans l'ISE en francais
        [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(437)    
       #regex qui permet de traiter la sortie du dcdiag en francais
        $regex = [regex]"(?sm)\.+\sLe\stest\s(\w+).+?de\s([A-Za-z0-9_-]+)\sa\s(réussi|échoué)" 
        $allmatches = $regex.Matches($command)
        Foreach($line in $allmatches){
            $ObjectDiag = [PSCustomObject]@{
                Server = $DomainController.Split(".")[0]
                TestName = $line.Groups[1].Value
                TestResult = $line.Groups[3].Value
            }
            $result+=$ObjectDiag
        }
        return $result
    }


    Merci de marquer comme reponses les interventions qui vous ont ete utile.

    dimanche 17 novembre 2019 00:10