PowerShell -opérateur de match et plusieurs groupes
J'ai suivantes entrée de journal que je suis le traitement en PowerShell, je suis en train d'extraire toutes les activité de les noms et les durées à l'aide de la -match
opérateur, mais je suis seulement à l'obtention d'un match de groupe. Je ne reçois pas tous les matchs que je vois quand je fais la même chose en C# à l'aide de la Regex
objet. Quelqu'un peut m'expliquer ce que je fais de mal?
Pertinentes Script PowerShell
$formattedMessage -match "(Get\sClient\sModel|Parse\sExpression|Get\sAbstract\sQuery|Compile\sQuery|Execute\sQuery|Get\sQuery\sPlan\sComplexity|Async\sTotal|Total)\s-\sduration\(([0-9]*)" | out-null
$matches
Sortie
Name Value
---- -----
0 Get Client Model - duration(0
1 Get Client Model
2 0
Entrée De Journal Exemple:
Timestamp: 11/9/2009 6:48:41 PM
Message:
Category: QueryService
Priority: 3
EventId: 1001
Severity: Information
Title: SPARQL Query Response
Machine: SPOON16-SERVER
App Domain: KnowledgeBaseHost.exe
ProcessId: 2040
Process Name: D:\QueryService\QSHost.exe
Thread Name:
Win32 ThreadId:8092
Extended Properties:
Key - Workflow_cbbdd58b-e574-4054-88d4-1dd7a56dc9d9
Timeout - 1800
Result Format - WireTable
Result from Registry - False
Compiled Query from Cache - True
Result Count - 28332
Query Plan Complexity - 661622
Get Client Model - duration(0) start(0)
Parse Expression - duration(0) start(0)
Get Abstract Query - duration(0) start(0)
Compile Query - duration(0) start(0)
Get Query Plan - duration(0) start(1)
Execute Query - duration(63695) start(1)
Get Query Plan Complexity - duration(0) start(63696)
Get Executed Operations - duration(0) start(63696)
Total - duration(63696) start(0)
Async Total - duration(63696) start(0)
OriginalL'auteur Eric Schoonover | 2009-11-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire cela avec le Select-String applet de commande dans la V2, mais vous devez spécifier le -AllMatches interrupteur par exemple:
Gardez à l'esprit que avec le
-match
opérateur la première chose que vous faites est à la recherche de "un" match c'est à dire l'expression régulière pattern correspond ou pas.OriginalL'auteur Keith Hill
J'ai été en mesure d'obtenir tous les groupes par la définition d'une expression régulière et en appelant ensuite .Matchs sur cette Regex. Toujours curieux de savoir si cela peut être fait avec l'opérateur-match en PowerShell.
OriginalL'auteur Eric Schoonover
L'opérateur-match est destiné à être utilisé qu'une seule fois; il ne fait pas un mondial de match sur l'entrée. Keith Hill mettre une suggestion pour un -matchall peut opérateur sur Microsoft connect ici.
Je vais vous suggérer une autre façon de le faire. Si l'entrée de journal est dans un fichier, vous pouvez utiliser l'instruction switch pour accomplir la même chose:
C'est le résultat que j'obtiens avec cette déclaration si
$entryRegex
a l'expression régulière que vous avez défini:OriginalL'auteur Jeff Hillman
http://www.johndcook.com/regex.html donne un décent exemple
Et, par tous les moyens, de simplifier votre expression:
J'ai pris votre échantillon de données et a été d'obtenir un bon résultat avec l'expression exacte ci-dessus.
powershell va générer les matchs en utilisant les regex
OriginalL'auteur genio
Vous pouvez inclure Expression Régulière Options dans une expression, mais malheureusement, Global ne semble pas être l'une des options disponibles.
OriginalL'auteur Nathan Hartley