Server Status Report

Server Status Report from PowerShell to HTML
for CPU, Memory, IP Address, and Hard Drive information.
# Define the input file containing server names (one per line) $ServerListFile = "D:\Lists\Servers.txt" # Text file containing server names (one per line) # Define the output HTML file $OutputHtmlFile = "C:\Logs\ServerStatusReporttbl.html" # Path to save the HTML report # Initialize an array to store server data $ServerData = @() # Read server names from the text file $Servers = Get-Content -Path $ServerListFile foreach ($Server in $Servers) { try { # Get CPU usage $CPU = Get-CimInstance -ClassName Win32_Processor -ComputerName $Server | Measure-Object -Property LoadPercentage -Average | Select-Object -ExpandProperty Average # Get memory usage $Memory = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $Server $TotalMemory = [math]::Round($Memory.TotalVisibleMemorySize / 1MB, 2) $FreeMemory = [math]::Round($Memory.FreePhysicalMemory / 1MB, 2) $UsedMemory = $TotalMemory - $FreeMemory # Get network IP address $IPAddresses = (Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -ComputerName $Server | Where-Object { $_.IPAddress -ne $null }).IPAddress -join ", " # Get disk information $Disks = Get-CimInstance -ClassName Win32_LogicalDisk -ComputerName $Server | Where-Object { $_.DriveType -eq 3 } # Only fixed drives foreach ($Disk in $Disks) { $DiskSize = [math]::Round($Disk.Size / 1GB, 2) $FreeSpace = [math]::Round($Disk.FreeSpace / 1GB, 2) # Add data to the array $ServerData += [PSCustomObject]@{ ServerName = $Server CPUUsage = "$CPU%" UsedMemory = "$UsedMemory GB" FreeMemory = "$FreeMemory GB" TotalMemory = "$TotalMemory GB" IPAddress = $IPAddresses DriveLetter = $Disk.DeviceID DiskSize = "$DiskSize GB" FreeDiskSpace = "$FreeSpace GB" } } } catch { Write-Warning "Failed to retrieve data for server: $Server" } } # Convert the data to an HTML table $HtmlContent = $ServerData | ConvertTo-Html -Property ServerName, CPUUsage, UsedMemory, FreeMemory, TotalMemory, IPAddress, DriveLetter, DiskSize, FreeDiskSpace -Head "<style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style>" -Title "Server Health Report" # Save the HTML content to a file $HtmlContent | Out-File -FilePath $OutputHtmlFile Write-Host "Report generated successfully at $OutputHtmlFile"