# encoding: ascii # api: powershell # title: Windows server health # description: windows server health check for 2008 2012 2012r2 # version: 0.1 # type: class # author: Prashant Pandey # license: CC0 # function: Get-MemoryUsage # x-poshcode-id: 6558 # x-archived: 2017-04-30T12:50:00 # x-published: 2017-10-07T07:56:00 # # ######################################################## # Created by Prashant Dev Pandey # pandey.nic@rediffmail.com # prashantdev.pandey@gmail.com ######################################################## #Server Service Health for windows server 2008 and above versions ######################################################## $Outputreport="" $Outputreport +="" ## Get Host Name $Hostname = hostname | Out-String ## Get version $Version = (Get-WmiObject -class Win32_OperatingSystem).Caption | Out-String ## Get Uptime $UPTIME=Get-WmiObject Win32_OperatingSystem $up = [Management.ManagementDateTimeConverter]::ToDateTime($UPTIME.LastBootUpTime) | Out-String ## Get Disk Spaces $Disk = Get-WmiObject Win32_logicaldisk -ComputerName LocalHost -Filter "DriveType=3" |select -property DeviceID,@{Name="Size(GB)";Expression={[decimal]("{0:N0}" -f($_.size/1gb))}},@{Name="Free Space(GB)";Expression={[decimal]("{0:N0}" -f($_.freespace/1gb))}},@{Name="Free (%)";Expression={"{0,6:P0}" -f(($_.freespace/1gb) / ($_.size/1gb))}}|ConvertTo-Html ## Get Critical Service Status $Private:wmiService =gsv -include "*SQL*" -Exclude "*ySQL*","*spo*"|select Name,DisplayName,Status|ConvertTo-Html $Services =gsv -include "*SQL*" -Exclude "*ySQL*","*spo*"|select Name,DisplayName,Status|ConvertTo-Html ## Get CPU Utilization $CPU_Utilization = Get-Process|Sort-object -Property CPU -Descending| Select -first 5 -Property ID,ProcessName,@{Name = 'CPU In (%)';Expression = {$TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds;[Math]::Round( ($_.CPU * 100 /$TotalSec),2)}},@{Expression={$_.threads.count};Label="Threads";},@{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}},@{Name="VM(MB)";Expression={"{0:N3}" -f($_.VM/1mb)}}|ConvertTo-Html #$proc =get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 2 #$cpu=($proc.readings -split ":")[-1] #$CPU_Utilization = [System.Math]::Round($cpu, 2) | Out-String ## Get Each Processor Utilization $arr=@() $ProcessorObject=gwmi win32_processor foreach($processor in $ProcessorObject) { $arr += $processor.Caption $arr += $processor.LoadPercentage } ## Security Patches $SecPatch = get-hotfix -Description "Security Update" |sort "Description" -desc | select Description,installedon -first 1 | Out-String ## RAM Usage $Private:perfmem = Get-WmiObject -namespace root\cimv2 Win32_PerfFormattedData_PerfOS_Memory $Private:totmem = Get-WmiObject -namespace root\cimv2 CIM_PhysicalMemory [Int32]$Private:totalcapacity = 0 foreach ($Mem in $totmem) { $totalcapacity += $Mem.Capacity / 1Mb } #Get-WmiObject Win32_PhysicalMemory | ForEach-Object {$totalcapacity += $_.Capacity / 1Mb} $Private:tmp = New-Object -TypeName System.Object $tmp | Add-Member -Name CapacityMB -Value $totalcapacity -MemberType NoteProperty $tmp | Add-Member -Name AvailableMB -Value $perfmem.AvailableMBytes -MemberType NoteProperty $ram_usage = $tmp |ConvertTo-Html ## Physical Memory function Get-MemoryUsage ($ComputerName=$ENV:ComputerName) { if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) { $ComputerSystem = Get-WmiObject -ComputerName $ComputerName -Class Win32_operatingsystem -Property TotalVisibleMemorySize, FreePhysicalMemory $MachineName = $ComputerSystem.CSName $FreePhysicalMemory = ($ComputerSystem.FreePhysicalMemory) / (1mb) $TotalVisibleMemorySize = ($ComputerSystem.TotalVisibleMemorySize) / (1mb) $TotalVisibleMemorySizeR = "{0:N2}" -f $TotalVisibleMemorySize $TotalFreeMemPerc = ($FreePhysicalMemory/$TotalVisibleMemorySize)*100 $TotalFreeMemPercR = "{0:N2}" -f $TotalFreeMemPerc # print the machine details: "" "" "" "
RAM$TotalVisibleMemorySizeR GB
Free Physical Memory$TotalFreeMemPercR %
" }} $PhyMem = Get-MemoryUsage $Hotfix=(get-hotfix | sort installedon)|select -first 5 HotFixID,InstalledBy,InstalledOn,Description|ConvertTo-Html $Processor_Counter=Get-Counter "\Processor(_total)\% Processor Time"|ConvertTo-Html $Total_Threads=(Get-Process |Select-Object -ExpandProperty Threads).Count ## Paging function Get-PageFile { param( [string]$computer="." ) Get-WmiObject -Class Win32_PageFileUsage -ComputerName $computer | Select @{Name="File";Expression={ $_.Name }}, @{Name="Base Size(MB)"; Expression={$_.AllocatedBaseSize}}, @{Name="Peak Size(MB)"; Expression={$_.PeakUsage}}, TempPageFile } $PhysicalRAM = (Get-WMIObject -class Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | % {[Math]::Round(($_.sum / 1GB),2)}) $ht = @{} $ht.Add('Total_Ram(GB)',$PhysicalRAM) $OSRAM = gwmi Win32_OperatingSystem | foreach {$_.TotalVisibleMemorySize,$_.FreePhysicalMemory} $ht.Add('Total Visable RAM GB',([Math]::Round(($OSRAM[0] /1MB),4))) $ht.Add('Available_Ram(GB)',([Math]::Round(($OSRAM[1] /1MB),4))) $RAM = New-Object -TypeName PSObject -Property $ht|ConvertTo-Html $Paging1=Get-PageFile|ConvertTo-Html $Paging = Get-WMIObject Win32_PageFileSetting | select Name, InitialSize, MaximumSize|ConvertTo-Html $Available_Bytes=Get-Counter -Counter "\Memory\Available Bytes"|Select -ExpandProperty CounterSamples|Select CookedValue |ft -HideTableHeaders|out-string $att=Get-Counter -Counter "\Memory\Committed Bytes"|Select -ExpandProperty CounterSamples|Select CookedValue |ft -HideTableHeaders|out-string $Comitted_Bytes="{0:N0}" -f (($att.trim())/1024/1024) $Handle_Count=Get-Counter -Counter "\Process(_Total)\Handle Count"|Select -ExpandProperty CounterSamples|Select CookedValue |ft -HideTableHeaders|out-string $Thread_Count=Get-Counter -Counter "\Process(_Total)\Thread Count"|Select -ExpandProperty CounterSamples|Select CookedValue |ft -HideTableHeaders|out-string $ftt=Get-Counter -Counter "\memory\Pool Paged Bytes"|Select -ExpandProperty CounterSamples|Select CookedValue |ft -HideTableHeaders|out-string $Pool_Paged="{0:N0}" -f (($ftt.trim())/1024/1024) $dtt=Get-Counter -Counter "\memory\Pool Nonpaged Bytes"|Select -ExpandProperty CounterSamples|Select CookedValue |ft -HideTableHeaders|out-string $Pool_NonPaged="{0:N0}" -f (($dtt.trim())/1024/1024) $Total_process=(get-process).count $Outputreport +="" $Outputreport +="
" $Outputreport +="" $Outputreport +="" $Outputreport +="" $Outputreport +="" $Outputreport +="" $Outputreport +="
Hostname"+$Hostname+"
Version"+$Version+"
Uptime"+$up+"
Physical Memory(MB)"+$RAM+"
System
Total Handles"+$Handle_Count.trim()+"
Total Thread"+$Thread_Count.trim()+"
Total Process"+$Total_process+"
Commit(MB)"+$Comitted_Bytes.trim()+"
Kernel Memory(MB)
Paged"+$Pool_Paged.trim()+"
Non Paged"+$Pool_NonPaged.trim()+"
" $Outputreport += "
" $Outputreport +="
" $Outputreport +="
" $Outputreport +="" $Outputreport +="" $Outputreport +="" $Outputreport +="" $Outputreport +="" $Outputreport +="" $Outputreport +="" #$Outputreport +="" $Outputreport +="" $Outputreport +="" #$Outputreport +="" #$Outputreport +="
Disk Size"+$Disk+"
Services"+$Services+"
Top5 Process"+$CPU_Utilization+"
Ram_Usage"+$ram_usage+"
Physical Memory"+$PhyMem+"
Processor Counter"+$Processor_Counter+"
Last 5 HotFix"+$Hotfix+"
Paging"+$Paging+"
No Of Threads"+$Total_Threads+"
Average process
Cpu LoadMem Load$CDrive
"+$CPULoad+""+$MemLoad+""+$CDrive+"
" $Outputreport += "" $Outputreport | out-file C:\Scripts\Windows_Server_Health_Status.html