2017-09-22 6 views
0

J'ai un script Powershell que les queues d'un fichier journal à l'aidePowershell: Piping Get-Content -wait à un tableau d'objets et de redessiner le tableau d'affichage

Get-Content $logFile -wait | ForEach { if ($_.Contains("[OK]")){ Write-Host -ForegroundColor Green $_ } elseif ($_.Contains("[FAIL]")){ Write-Host -ForegroundColor Red $_ } elseif ($_.Contains("[INFO]")){ Write-Host -ForegroundColor Yellow $_ } else { Write-Host $_ } } 

Ce fichier journal ne contient jamais plus de peut-être 100 lignes que tout se rapportent à l'un de l'application. 15 services. En ce moment, je viens de sortir ces 100 lignes à l'écran en utilisant la queue ci-dessus sur le fichier journal. Mais ce que je voudrais vraiment faire est juste d'afficher une table avec 15 lignes, et mettre à jour continuellement la table quand je reçois une nouvelle ligne du journal pour montrer de nouvelles informations quand je l'obtiens du journal.

J'ai essayé de chercher des exemples d'affichage d'une telle table, mais je n'en trouve aucune. Est-ce même possible et si c'est le cas, j'apprécierais un lien vers quelques informations à ce sujet.

+0

Im va être honnête ... je ne suis pas sûr de ce que vous essayez de faire .... – ArcSet

+0

Une table qui affiche des informations d'état et les changements que les changements d'état. Pas seulement en listant un changement de statut en tant que ligne de texte. –

Répondre

0

Chaque fois que vous recevez un message, vous pouvez créer un objet et l'enregistrer dans un tableau. Pour re-produire la table, vous devez soit l'afficher ligne par ligne comme vous étiez ou effacer votre hôte à chaque fois et sortir l'objet entier.

$log = @() 
Get-Content $logFile -wait | 
    ForEach-Object { 
    switch ($_) { 
     {$_.Contains("[OK]")} { 
      $logentry = [pscustomobject]@{ 
       'Status' = 'Success' 
       'Message' = ($_ -split '\[OK\]')[-1] 
      } 
      $log += $logentry 
     } 
     {$_.Contains("[FAIL]")} { 
      $logentry = [pscustomobject]@{ 
       'Status' = 'Failure' 
       'Message' = ($_ -split '\[FAIL\]')[-1] 
      } 
      $log += $logentry 
     } 
     {$_.Contains("[INFO]")} { 
      $logentry = [pscustomobject]@{ 
       'Status' = 'Info' 
       'Message' = ($_ -split '\[INFO\]')[-1] 
      } 
      $log += $logentry 
     } 
     default { 
      $logentry = [pscustomobject]@{ 
       'Status' = 'Unknown' 
       'Message' = $_ 
      } 
      $log += $logentry 
     } 
    } 
    Clear-Host 
    foreach ($logentry in $log) { 
     switch ($logentry.Status) { 
      'Success' { Write-Host -ForegroundColor Green $logentry } 
      'Failure' { Write-Host -ForegroundColor Red $logentry } 
      'Info' { Write-Host -ForegroundColor Yellow $logentry } 
      default { Write-Host $logentry } 
     } 
    } 
} 

$log | Export-CSV C:\Example\path.csv -NoTypeInformation 
+0

Merci ... c'est exactement ce que je cherchais. –