public/Get-htop.ps1
function Get-htop { [CmdletBinding()] Param ( [string[]] $ComputerName, [Parameter(Position=1)] [Alias("l")] [int]$TotalList=24, [Parameter(Position=2)] [Alias("r")] [int]$RefreshRate=1, [System.Management.Automation.PSCredential] $Credential ) $scriptblock = { While ($true) { $os = Get-Ciminstance Win32_OperatingSystem $osname = $os.caption $lastboot = Get-date $os.LastBootUpTime #-Format "MM-dd-yyyy hh:mm" $currenttime = Get-Date $os.LocalDateTime #-Format "MM-dd-yyyy hh:mm" $cpucores = (Get-CIMInstance Win32_PerfFormattedData_PerfOS_Processor) | Select-Object @{N="Name";E={"CPU"+ $_.name}},PercentProcessorTime | Sort-Object Name $Memusedperc = 100 - [math]::Round(($os.FreePhysicalMemory/$os.TotalVisibleMemorySize)*100,2) $memused = [math]::Round(($os.TotalVisibleMemorySize - $os.FreePhysicalMemory)*1024/1GB,2) $memtotal = [math]::Round(($os.TotalVisibleMemorySize)*1024/1GB,2) $Page = Get-CimInstance -Class Win32_PageFileUsage $pagedata = @() foreach ($p in $page){ $pageperc = [math]::Round(($p.CurrentUsage/$p.AllocatedBaseSize)*100,2) $pageused = [math]::Round($p.CurrentUsage/1024,2) $pagetotal = [math]::Round($p.AllocatedBaseSize/1024,2) $pobject = [pscustomobject]@{ Name = ($p.name -split ":")[0] Used = $pageused Total = $pagetotal PercUsed = $pageperc } $pagedata += $pobject } $CounterSamples = Get-Counter '\Process(*)\ID Process','\Process(*)\% Processor Time','\Process(*)\Working Set' -ErrorAction SilentlyContinue | Select-Object -Expand CounterSamples $bardisplay = @() #CPU Display foreach ($core in $cpucores){ $bar = $null $fgcolor = $null $name = $null $name = if ($core.name -like "*Total"){"TOTL"}else{$core.name} switch ($core.PercentProcessorTime){ {$_ -ge 0 -and $_ -lt 10}{$bar = "$name [ ] $($core.PercentProcessorTime)%"; $fgcolor = "Green"} {$_ -ge 10 -and $_ -lt 20}{$bar = "$name [ | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Green"} {$_ -ge 20 -and $_ -lt 30}{$bar = "$name [ | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Green"} {$_ -ge 30 -and $_ -lt 40}{$bar = "$name [ | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Green"} {$_ -ge 40 -and $_ -lt 50}{$bar = "$name [ | | | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Green"} {$_ -ge 50 -and $_ -lt 60}{$bar = "$name [ | | | | | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Green"} {$_ -ge 60 -and $_ -lt 70}{$bar = "$name [ | | | | | | | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Yellow"} {$_ -ge 70 -and $_ -lt 80}{$bar = "$name [ | | | | | | | | | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Yellow"} {$_ -ge 80 -and $_ -lt 90}{$bar = "$name [ | | | | | | | | | | | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Yellow"} {$_ -ge 90 -and $_ -lt 95}{$bar = "$name [ | | | | | | | | | | | | | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Red"} {$_ -ge 95 -and $_ -le 100}{$bar = "$name [ | | | | | | | | | | | | | | | | | | | | ] $($core.PercentProcessorTime)%"; $fgcolor = "Red"} } $object = [pscustomobject]@{ Bar = $bar Color = $fgcolor } $bardisplay += $object #Write-Host "$bar" -ForegroundColor $fgcolor } #RAM Display $ramname = "MEM " $fgcolor = $null switch ($Memusedperc){ {$_ -ge 0 -and $_ -lt 10}{$rambar = "$ramname [ ] $memused / $memtotal GB"; $fgcolor = "Green"} {$_ -ge 10 -and $_ -lt 20}{$rambar = "$ramname [ | | ] $memused / $memtotal GB";; $fgcolor = "Green"} {$_ -ge 20 -and $_ -lt 30}{$rambar = "$ramname [ | | | | ] $memused / $memtotal GB";; $fgcolor = "Green"} {$_ -ge 30 -and $_ -lt 40}{$rambar = "$ramname [ | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Green"} {$_ -ge 40 -and $_ -lt 50}{$rambar = "$ramname [ | | | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Green"} {$_ -ge 50 -and $_ -lt 60}{$rambar = "$ramname [ | | | | | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Green"} {$_ -ge 60 -and $_ -lt 70}{$rambar = "$ramname [ | | | | | | | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Yellow"} {$_ -ge 70 -and $_ -lt 80}{$rambar = "$ramname [ | | | | | | | | | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Yellow"} {$_ -ge 80 -and $_ -lt 90}{$rambar = "$ramname [ | | | | | | | | | | | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Yellow"} {$_ -ge 90 -and $_ -lt 95}{$rambar = "$ramname [ | | | | | | | | | | | | | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Red"} {$_ -ge 95 -and $_ -le 100}{$rambar = "$ramname [ | | | | | | | | | | | | | | | | | | | | ] $memused / $memtotal GB";; $fgcolor = "Red"} } $object = [pscustomobject]@{ Bar = $rambar Color = $fgcolor } $bardisplay += $object #Write-Host "$rambar" -ForegroundColor $fgcolor #PGFile Display foreach ($page in $pagedata){ $pagename = "PG_" + $page.Name $pageused = $page.used $pagetotal = $page.total $fgcolor = $null switch ($pageperc){ {$_ -ge 0 -and $_ -lt 10}{$pagebar = "$pagename [ ] $pageused / $pagetotal GB"; $fgcolor = "Green"} {$_ -ge 10 -and $_ -lt 20}{$pagebar = "$pagename [ | | ] $pageused / $pagetotal GB";; $fgcolor = "Green"} {$_ -ge 20 -and $_ -lt 30}{$pagebar = "$pagename [ | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Green"} {$_ -ge 30 -and $_ -lt 40}{$pagebar = "$pagename [ | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Green"} {$_ -ge 40 -and $_ -lt 50}{$pagebar = "$pagename [ | | | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Green"} {$_ -ge 50 -and $_ -lt 60}{$pagebar = "$pagename [ | | | | | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Green"} {$_ -ge 60 -and $_ -lt 70}{$pagebar = "$pagename [ | | | | | | | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Yellow"} {$_ -ge 70 -and $_ -lt 80}{$pagebar = "$pagename [ | | | | | | | | | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Yellow"} {$_ -ge 80 -and $_ -lt 90}{$pagebar = "$pagename [ | | | | | | | | | | | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Yellow"} {$_ -ge 90 -and $_ -lt 95}{$pagebar = "$pagename [ | | | | | | | | | | | | | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Red"} {$_ -ge 95 -and $_ -le 100}{$pagebar = "$pagename [ | | | | | | | | | | | | | | | | | | | | ] $pageused / $pagetotal GB";; $fgcolor = "Red"} } $object = [pscustomobject]@{ Bar = $pagebar Color = $fgcolor } $bardisplay += $object }#end foreach $page $procoutput = $CounterSamples | Group-Object { Split-Path $_.Path } | Where-Object {$_.Group[1].InstanceName -notmatch "^Idle|_Total|System$"} | Sort-Object -Property {$_.Group[1].CookedValue} -Descending | Select-Object -First $using:TotalList | Format-Table @{Name="ProcessId";Expression={$_.Group[0].CookedValue}},@{Name="ProcessorUsage";Expression={[System.Math]::Round($_.Group[1].CookedValue/100/$env:NUMBER_OF_PROCESSORS,4)}},@{Name="ProcessName";Expression={$_.Group[1].InstanceName}},@{Name="WorkingSet";Expression={[System.Math]::Round($_.Group[2].CookedValue/1MB,4)}} Clear-Host Write-Host "ComputerName: $env:COMPUTERNAME" Write-Host "OS: $osname" Write-Host "Lastboot: $lastboot" Write-Host "CurrentTime: $currenttime" Write-Host "============================================================" foreach ($bar in $bardisplay){ Write-Host $bar.bar -ForegroundColor $bar.color }#end foreach $bar $procoutput Start-Sleep -Seconds 3 } }#end scriptblock #Execute Scriptblock on Computername(s) with set parameters. $params = @{ ScriptBlock = $scriptblock } if ($ComputerName){ $params['ComputerName'] = $ComputerName } if ($Credential){ $params['Credential'] = $Credential } Invoke-Command @params } |