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 {} } |