SystemInfo-ToHTML.psm1


Function SystemInfo-ToHtml {


                $Head = @"
<style type="text/css" media="screen">
TABLE align="center" {border-width: 1px; border-style: solid; border-color: black; border-collapse: colapse;}
TH {text-align: center; border-width: 1px; padding: 3px; border-style: solid; border-color: black;background-color: lightblue;}
TD {text-align: center; border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
<H3> </H3>
<Title> HARDWARE REPORT </title>
"@


                $CPUInfo = Get-WmiObject Win32_Processor
                $OSInfo = Get-WmiObject Win32_OperatingSystem  
                $modelinfo = Get-CimInstance  -ClassName win32_computersystem
                $moboinfo = Get-WmiObject win32_baseboard
                $biosinfo = Get-WmiObject win32_bios
                $InstalledRAM = Get-WmiObject -Class Win32_ComputerSystem
                $TotalInstalledRAM = [Math]::Round(($InstalledRAM.TotalPhysicalMemory / 1GB))
                $videoinfo = Get-WmiObject  win32_videocontroller
                $audioinfo = Get-WmiObject win32_sounddevice
                $printerinfo = Get-WmiObject win32_printer 2>$null
             
                                     
                Foreach ($CPU in $CPUInfo) {

                    # CPU

                    $infoObject = New-Object PSObject
                 
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "Family"         -value $CPU.Description
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "Model"          -value $CPU.Name
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "Manufacturer"   -value $CPU.Manufacturer
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "Fisical Cores"  -value $CPU.NumberOfCores
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "L2 Cache"       -value $CPU.L2CacheSize
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "L3 Cache"       -value $CPU.L3CacheSize
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "Socket"         -Value $CPU.SocketDesignation
                    Add-Member -inputObject $infoObject -memberType NoteProperty -name "Logical Processors"  -value $CPU.NumberOfLogicalProcessors
                }
             
                $a = $infoObject | ConvertTo-Html -Fragment -PreContent "<h2> -----------------------------------------------------
             HARDWARE REPORT
             ----------------------------------------------------- </h2><p> <h3> PROCESSORS: </h3>"
 -PostContent "<h3> OPERATING SYSTEM: </h3>"
             
                Foreach ($OS in $OSInfo) {

                    # SO

                    $infoObject2 = New-Object PSObject
                   
                    Add-Member -inputObject $infoObject2 -memberType NoteProperty -name "Name"             -value $OSInfo.Caption
                    Add-Member -inputObject $infoObject2 -memberType NoteProperty -name "Build Number"     -value $OSInfo.BuildNumber
                    Add-Member -inputObject $infoObject2 -memberType NoteProperty -name "Manufacturer"     -value $OSInfo.Manufacturer
                    Add-Member -inputObject $infoObject2 -memberType NoteProperty -name "Serial Number"    -value $OSInfo.SerialNumber
                    Add-Member -inputObject $infoObject2 -memberType NoteProperty -name "Status"           -value $OSInfo.Status   
                }
             
                $b = $infoObject2 | ConvertTo-Html -PreContent "<h2> </h2>" -Fragment

                Foreach ($VGA in $videoinfo) {

                    # VIDEO

                    $infoObject3 = New-Object PSObject

                    Add-Member -inputObject $infoObject3 -memberType NoteProperty -name "Manufacturer"  -value $vga.adaptercompatibility 
                    Add-Member -inputObject $infoObject3 -memberType NoteProperty -name "Model"         -value $vga.Caption
                    Add-Member -inputObject $infoObject3 -memberType NoteProperty -name "Driver"        -value $vga.DriverVersion
                    Add-Member -inputObject $infoObject3 -memberType NoteProperty -name "Status"        -value $vga.Status
                    Add-Member -inputObject $infoObject3 -memberType NoteProperty -name "Resolution"    -value $vga.VideoModeDescription
                } 

                $c = $infoObject3 | ConvertTo-Html -Fragment -PreContent "<H3>VIDEO:</h3>"

                Foreach ($printer in $printerinfo) {

                    # PRINTERS

                    $infoObject4 = New-Object PSObject
                 
                    Add-Member -inputObject $infoObject4 -memberType NoteProperty -name "Name"               -value $printer.Caption
                    Add-Member -inputObject $infoObject4 -memberType NoteProperty -name "Default Printer"    -value $printer.default
                    Add-Member -inputObject $infoObject4 -memberType NoteProperty -name "Driver"            -value $printer.drivername
                    Add-Member -inputObject $infoObject4 -memberType NoteProperty -name "Port"                  -value $printer.portname
                    Add-Member -inputObject $infoObject4 -memberType NoteProperty -name "Print server"          -value $printer.servername
                    Add-Member -inputObject $infoObject4 -memberType NoteProperty -name "Spool Service Status"   -value $printer.spoolenabled
                } 

                $d = $infoObject4 | ConvertTo-Html -Fragment -PreContent "<H3>PRINTERS:</h3>" 
             
                # LOCAL MACHINE
             
                foreach ($model in $modelinfo -and $TotalInstalledRAM) {
             
                    $infoObject5 = New-Object psobject
             
                    Add-Member -InputObject $infoObject5 -MemberType NoteProperty -Name "Name"           -Value $modelinfo.Name
                    Add-Member -InputObject $infoObject5 -MemberType NoteProperty -Name "Type"           -Value $modelinfo.ChassisSKUNumber
                    Add-Member -InputObject $infoObject5 -MemberType NoteProperty -Name "Family"         -Value $modelinfo.SystemFamily 
                    Add-Member -InputObject $infoObject5 -MemberType NoteProperty -Name "Model"          -Value $modelinfo.Model
                    Add-Member -InputObject $infoObject5 -MemberType NoteProperty -Name "Installed (GB)" -Value $TotalInstalledRAM
                 
                }
             
                $e = $infoObject5 | ConvertTo-Html -PreContent "<H3>LOCAL MACHINE:</H3>" -Fragment
             
                Foreach ($MOBO in $moboInfo -and $biosinfo) {

                    # MOBO

                    $infoObject6 = New-Object PSObject
                 
                    Add-Member -inputObject $infoObject6 -memberType NoteProperty -name "Manufacturer"    -value $moboinfo.Manufacturer
                    Add-Member -inputObject $infoObject6 -memberType NoteProperty -name "Serial Number" -value $moboinfo.SerialNumber
                    Add-Member -inputObject $infoObject6 -memberType NoteProperty -name "Model"        -value $moboinfo.Product
                    Add-Member -inputObject $infoObject6 -memberType NoteProperty -name "BIOS"          -value $biosinfo.SMBIOSBIOSVersion
                } 

                $f = $infoObject6 | ConvertTo-Html -Fragment -PreContent "<H3>MOTHERBOARD:</h3>" 

                Foreach ($audio in $audioinfo) {

                    # SOUND

                    $infoObject7 = New-Object PSObject

                    Add-Member -inputObject $infoObject7 -memberType NoteProperty -name "Manufacturer"  -value $audio.Manufacturer        
                    Add-Member -inputObject $infoObject7 -memberType NoteProperty -name "Name"      -value $audio.Name
                    Add-Member -inputObject $infoObject7 -memberType NoteProperty -name "Status"      -value $audio.Status 
                }

                $g = $infoObject7 | ConvertTo-Html -Fragment -PreContent "<H3>SOUND CARD:</h3>"

                # NETWORK
                           
                $h = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IPAddress -ne $null } | Select-Object DNSdomain,
                @{Name = "Manufacturer"     ; Expression = { $_.Description } },    
                @{Name = "IP Addresses" ; Expression = { $_.ipaddress } }, 
                @{Name = "Gateway"        ; Expression = { $_.DefaultIPGateway } },
                @{Name = "Mac Address"    ; Expression = { $_.MACAddress } },
                @{Name = "DHCP Server"  ; Expression = { $_.dhcpserver } } | ConvertTo-Html -Fragment -As Table -PreContent "<H3>NETWORK:</H3>" -PostContent "<H3>DISKS:</H3>"
            
                # DISKS
            
                $i = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq "3" } | Select-Object VolumeName, DeviceID,
                @{ Name = "Total (GB)" ; Expression = { "{0:N1}" -f ( $_.Size / 1gb) } },        
                @{ Name = "Free Space (GB)" ; Expression = { "{0:N1}" -f ( $_.Freespace / 1gb ) } },        
                @{ Name = "% Free" ; Expression = { "{0:P0}" -f ( $_.FreeSpace / $_.Size ) } } | ConvertTo-Html -Fragment -As Table 
                                
                Clear-Host
                ConvertTo-Html -Body "$a $b $c $d $e $f $g $h $i " -Head $head | Out-File $env:USERPROFILE\desktop\Report.htm
                Invoke-Item $env:USERPROFILE\desktop\Report.htm

          }