0
votes

PowerShell Get Date du fichier journal

Je voudrais passer la date à partir du texte du fichier journal.

texte dans le fichier journal.

code d'erreur. 200105. Texte simple et ainsi de suite -------------------------------------------------------------------------------------------------------------------------------------?

code d'erreur. 2000207. Simple texte et ainsi de suite -----------------> Il devrait passer à la date du 07 février 07

J'essaie ceci mais cela ne fonctionne pas.

Get-Day "200105" -Format "Y-M-D", mais cela ne fonctionne pas.

J'essaie aussi "200105" | Date mais toujours même problème

Cela fonctionne [DateTime] :: parseexact ("120105", "y.m.d", $ null) mais comment puis-je obtenir juste la date mais ignore tout l'autre texte


4 commentaires

Vous pouvez faire [DateTime] :: parseexact ('200105', 'ymmdd', [cultureinfo] :: envar iantculture) .tostrin g ('yyyy mmm dd') .


Je reçois une erreur suivante lors de l'exécution de cette commande.Exception appelant "parseexact" avec "3" argument (s): "La chaîne n'a pas été reconnue comme une date d'heure valide." À la ligne: 7 Char: 1 + [DateTime] :: parseexact ($ texte, 'ymmdd', [cultureinfo] :: tculture invariante) ... + ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ + CatégorieInfo: NotSpecified: (:) [], MethodInvocationException + PullalifiedErrorId: FormatException


Qu'est-ce qui est dans $ texte


Ce travail pour moi. $ TEXT2 = [REGEX] :: Matchs ($ texte, '\ d \ d +. \ D \ d +. \ D \ d') [0] .Value [0] .Value [DateTime] :: Parseexact ($ text2, "ymd", $ null)


3 Réponses :


0
votes

Selon le Documentation , Get-Day convertit une chaîne à une date s'il reconnaît le format de date à partir des paramètres locaux.

Par exemple, au Royaume-Uni, il reconnaît Get-Day "2020/03/21" mais pas à la date "20200321" P>

La chaîne de format n'est utilisée que pour la mise en forme de la date actuelle. P >

Ceci fonctionne: le nombre de caractères de la chaîne de format représente la taille de l'entrée (il correspond au nombre de chiffres dans la journée et l'année - il est plus compliqué pendant des mois) et m représente des mois (M représente des minutes) . P>

PS /home/alistair> [datetime]::ParseExact("200321","yyMMdd",$null)    


1 commentaires

Je sais que le format de la date sera toujours YMD, donc je le transforme en date. $ text = "Quelqu'un.test.12.01.05.xxx.sdsdd" # [DateTime] :: parseexact ($ texte, "y.m.d", $ null)



0
votes

Si vous voulez une version plus courte, vous pouvez le faire en tuyant la sortie comme suit

$date.ToString("yyyy MMMM dd")


0 commentaires

0
votes

Votre deuxième exemple 2000207 code> n'est pas valide en raison du 0 code> là-bas.

Je voudrais utiliser la méthode trypseexact code> ici pour voir Si ce que vous avez obtenu est en fait une chaîne DateTime parsable. p> xxx pré>

Vous lisez probablement le fichier journal ligne-ligne, quelque chose comme: p>

Get-Content -Path 'TheLogFile' | ForEach-Object {
    if ($_ -match '^Error code\s*\.?\s*(\d{6})') {
        $date = Get-Date    # any valid DateTime object will do
        if ([datetime]::TryParseExact($Matches[1], 'yyMMdd', [cultureinfo]::InvariantCulture, 0, [ref]$date)) { 
            # do something with the date found. For demo, just output in the console
            "Found a date: $date" 
        }
    }
}


0 commentaires