Scripts/Get-PCPhysicalMemory.ps1

Function Get-PCPhysicalMemory {

    <#
 
    .SYNOPSIS
    Get memory information
 
    .DESCRIPTION
    Get memory information
 
    .PARAMETER ComputerName
    The target computer name
 
    .EXAMPLE
    Get-PCPhysicalMemory -ComputerName LabPC2024
 
    .NOTES
    N/A
 
    .LINK
    N/A
 
    #>


    [CmdletBinding ()]

    Param (

        [Parameter (Mandatory = $True,
                    ValueFromPipeline = $True,
                    ValueFromPipelineByPropertyName = $True,
                    HelpMessage = 'Enter computer name'
                   )
        ]

        [String[]]$ComputerName

    )

    BEGIN {

        $MemoryFormFactor = @{

            '0' = 'Unknown'
            '1' = 'Other'
            '2' = 'SIP'
            '3' = 'DIP'
            '4' = 'ZIP'
            '5' = 'SOJ'
            '6' = 'Proprietary'
            '7' = 'SIMM'
            '8' = 'DIMM'
            '9' = 'TSOP'
            '10' = 'PGA'
            '11' = 'RIMM'
            '12' = 'SODIMM'
            '13' = 'SRIMM'
            '14' = 'SMD'
            '15' = 'SSMP'
            '16' = 'QFP'
            '17' = 'TQFP'
            '18' = 'SOIC'
            '19' = 'LCC'
            '20' = 'PLCC'
            '21' = 'BGA'
            '22' = 'FPBGA'
            '23' = 'LGA'

        }

        $MemoryType = @{

            '0' = 'Unknown'
            '1' = 'Other'
            '2' = 'DRAM'
            '3' = 'Synchronous DRAM'
            '4' = 'Cache DRAM'
            '5' = 'EDO'
            '6' = 'EDRAM'
            '7' = 'VRAM'
            '8' = 'SRAM'
            '9' = 'RAM'
            '10' = 'ROM'
            '11' = 'Flash'
            '12' = 'EEPROM'
            '13' = 'FEPROM'
            '14' = 'EPROM'
            '15' = 'CDRAM'
            '16' = '3DRAM'
            '17' = 'SDRAM'
            '18' = 'SGRAM'
            '19' = 'RDRAM'
            '20' = 'DDR'
            '21' = 'DDR2'
            '22' = 'DDR2 FB-DIMM'
            '24' = 'DDR3'
            '25' = 'FBD2'
            '26' = 'DDR4'

        }

        $MemoryTypeDetail = @{

            '1' = 'Reserved'
            '2' = 'Other'
            '4' = 'Unknown'
            '8' = 'Fast-paged'
            '16' = 'Static column'
            '32' = 'Pseudo-static'
            '64' = 'RAMBUS'
            '128' = 'Synchronous'
            '256' = 'CMOS'
            '512' = 'EDO'
            '1024' = 'Window DRAM'
            '2048' = 'Cache DRAM'
            '4096' = 'Non-volatile'

        }

        Function Show-Output ($Computer, $Values, $Status) {

            If ($Values.Capacity) {

                $Capacity = "$($Values.Capacity / 1GB)$(' GB')"

            }

            [PSCustomObject]@{

                ComputerName = $Computer
                Description = $Values.Tag
                BankLabel = $Values.BankLabel
                Capacity = $Capacity
                ConfiguredClockSpeed = $Values.ConfiguredClockSpeed
                ConfiguredVoltage = $Values.ConfiguredVoltage
                MinVoltage = $Values.MinVoltage
                MaxVoltage = $Values.MaxVoltage
                InterleaveDataDepth = $Values.InterleaveDataDepth
                InterleavePosition = $Values.InterleavePosition
                DataWidth = $Values.DataWidth
                TotalWidth = $Values.TotalWidth
                DeviceLocator = $Values.DeviceLocator
                FormFactor = $MemoryFormFactor["$($Values.FormFactor)"]
                MemoryType = $MemoryType["$($Values.MemoryType)"]
                TypeDetail = $MemoryTypeDetail["$($Values.TypeDetail)"]
                Speed = $Values.Speed
                Manufacturer = $Values.Manufacturer
                PartNumber = $Values.PartNumber
                SerialNumber = $Values.SerialNumber
                Status = $Status

            }

        }

    }

    PROCESS {

        ForEach ($Computer In $ComputerName) {

            If (Test-Connection -ComputerName $Computer -Count 1 -Quiet) {

                Try {

                    $Data = Get-WmiObject Win32_PhysicalMemory -ComputerName $Computer | Select-Object *

                    ForEach ($Item In $Data) {

                        Show-Output $Computer.ToUpper() $Item 'Ok'

                    }

                }

                Catch {

                    Show-Output $Computer.ToUpper() $Null $PSItem.Exception.Message

                }

            }

            Else {

                Show-Output $Computer.ToUpper() $Null 'Unreachable'

            }

        }

    }

    END {}

}