Powershell:通过管道获取内容 - 等待对象数组并重绘显示 table
Powershell: Piping Get-Content -wait to an array of objects and redraw display table
我有一个使用
跟踪日志文件的 Powershell 脚本
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 $_ } }
此日志文件包含的行绝不会超过 100 行,这些行都与其中一个应用程序有关。 15 项服务。现在我只是使用上面的日志文件尾部将这 100 行输出到屏幕上。
但我真正想做的是只显示 15 行的 table,并在我从日志中获取新行时不断更新 table 以显示新信息从日志中获取。
我曾尝试搜索显示 table 的示例,但找不到任何示例。是否有可能,如果有可能,那么我将不胜感激 link 以提供有关它的一些信息。
每次收到消息时,您都可以创建一个对象并将其保存到数组中。要重新输出 table,您需要像以前一样逐行显示它,或者每次都清除主机并输出整个对象。
$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
我有一个使用
跟踪日志文件的 Powershell 脚本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 $_ } }
此日志文件包含的行绝不会超过 100 行,这些行都与其中一个应用程序有关。 15 项服务。现在我只是使用上面的日志文件尾部将这 100 行输出到屏幕上。
但我真正想做的是只显示 15 行的 table,并在我从日志中获取新行时不断更新 table 以显示新信息从日志中获取。
我曾尝试搜索显示 table 的示例,但找不到任何示例。是否有可能,如果有可能,那么我将不胜感激 link 以提供有关它的一些信息。
每次收到消息时,您都可以创建一个对象并将其保存到数组中。要重新输出 table,您需要像以前一样逐行显示它,或者每次都清除主机并输出整个对象。
$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