Scripts/Get-PCComputerSystem.ps1

Function Get-PCComputerSystem {

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


    [CmdletBinding ()]

    Param (

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

        [String[]]$ComputerName

    )

    BEGIN {

        $DomainRole = @{

            '0' = 'Standalone workstation'
            '1' = 'Member workstation'
            '2' = 'Standalone server'
            '3' = 'Member server'
            '4' = 'Backup domain controller'
            '5' = 'Primary domain controller'

        }

        $PCSystemType = @{

            '0' = 'Unspecified'
            '1' = 'Desktop'
            '2' = 'Mobile'
            '3' = 'Workstation'
            '4' = 'Enterprise server'
            '5' = 'Small Office/Home Office (SOHO) server'
            '6' = 'Appliance PC'
            '7' = 'Performance server'
            '8' = 'Maximum'

        }

        $PCSystemTypeEx = @{

            '0' = 'Unspecified'
            '1' = 'Desktop'
            '2' = 'Mobile'
            '3' = 'Workstation'
            '4' = 'Enterprise server'
            '5' = 'Small Office/Home Office (SOHO) server'
            '6' = 'Appliance PC'
            '7' = 'Performance server'
            '8' = 'Slate'
            '9' = 'Maximum'

        }

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

            If ($Values.TotalPhysicalMemory) {

                [Int]$Memory = $Values.TotalPhysicalMemory / 1GB
                $TotalMemory = "$($Memory)$(' GB')"

            }

            [PSCustomObject]@{

                ComputerName = $Computer
                Description = $Values.Description
                SystemType = $Values.SystemType
                BootupState = $Values.BootupState
                DNSHostName = $Values.DNSHostName
                PartOfDomain = $Values.PartOfDomain
                Domain = $Values.Domain
                Workgroup = $Values.Workgroup
                DomainRole = $DomainRole["$($Values.DomainRole)"]
                Manufacturer = $Values.Manufacturer
                Model = $Values.Model
                NumberOfLogicalProcessors = $Values.NumberOfLogicalProcessors
                NumberOfProcessors = $Values.NumberOfProcessors
                PCSystemType = $PCSystemType["$($Values.PCSystemType)"]
                PCSystemTypeEx = $PCSystemTypeEx["$($Values.PCSystemTypeEx)"]
                PrimaryOwnerName = $Values.PrimaryOwnerName
                TotalPhysicalMemory = $TotalMemory
                Status = $Status

            }

        }

    }

    PROCESS {

        ForEach ($Computer In $ComputerName) {

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

                Try {

                    $Data = Get-WmiObject Win32_ComputerSystem -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 {}

}