public/Get-ComputerInfo.ps1
function Get-ComputerInfo { <# .SYNOPSIS Gathers information about the system and displays it to the user. .DESCRIPTION Uses lscpu, uname, os-release file, glxinfo, lsmem, /sys/class/dmi/id/(bios_date, bios_vendor, bios_version) files to filter out a PSCustomObject with useful system data. .NOTES Author: Emil Larsson, 2023-03-27 I don't expect this script to be very robust, since it's using a lot of text manipulation .EXAMPLE Get-ComputerInfo Gets an object with computer information. #> [CmdletBinding()] param ( ) # Verifies required binary Resolve-BinDep -Bins "lscpu", "awk", "lspci", "grep", "lsmem", "uname" $script:CPUData = lscpu | awk '/^Model name:/ || /^Socket\(s\):/ || /^Core\(s\) per socket:/ || /^Thread\(s\) per core:/ {print $0}' $script:OSData = (Get-Content /etc/os-release) | Select-String -Pattern '(?<=NAME=|VERSION=|PRETTY_NAME=|HOME_URL=|SUPPORT_END=)[^,\n]+' -Raw # DisplayData $DisplayData = (lspci | grep -i vga) -split ":" | Select-Object -Last 1 if ($DisplayData -like " *") { $DisplayData = $DisplayData.TrimStart(" ") } # Ram $RAM = (lsmem | Select-String 'Total online memory:' -Raw ).Split(': ')[1] if ($RAM -like "* *") { $RAM = $RAM.Replace(" ","") } # CPU Regex $ThreadsPerCore = $CPUData[1].Substring($CPUData[1].Length - 2) if ($ThreadsPerCore -like "* *") { $ThreadsPerCore = $ThreadsPerCore.Trim(" ") } $CorePerSocket = $CPUData[2].Substring($CPUData[2].Length - 2) if ($CorePerSocket -like "* *") { $CorePerSocket = $CorePerSocket.Trim(" ") } $Sockets = $CPUData[3].Substring($CPUData[3].Length - 2) if ($Sockets -like "* *") { $Sockets = $Sockets.Trim(" ") } # Dist Name & version $regex = '"([^"]*)"' $DistName = ([regex]::Match($OSData[0], $regex)).Value $DistNameData = $script:OSData | Where-Object {$_ -like "VERSION=*"} $DistVersion = ([regex]::Match($DistNameData, $regex)).Value # Fix disk display: $DiskSizeNice = (Get-PSDrive | Select-Object @{L="DiskSize";E={ ($_.Free + $_.Used) / 1GB }} | Where-Object {$_.DiskSize -gt 0}).DiskSize | ForEach-Object { if ($_ -ge 1) { [int]$_ } } if ($DiskSizeNice[0] -eq $DiskSizeNice[1]) { $DiskSizeNice = $DiskSizeNice[0] } $DiskFreeNice = (Get-PSDrive | Select-Object @{L="DiskFree";E={ ($_.Free) / 1GB }} | Where-Object {$_.DiskFree -gt 0}).DiskFree | ForEach-Object { if ($_ -ge 1) { [int]$_ } } if ($DiskFreeNice[0] -eq $DiskFreeNice[1]) { $DiskFreeNice = $DiskFreeNice[0] } $DiskUsedNice = (Get-PSDrive | Select-Object @{L="DiskUsed";E={ ($_.Used) / 1GB }} | Where-Object {$_.DiskUsed -gt 0}).DiskUsed | ForEach-Object { if ($_ -ge 1) { [int]$_ } } if ($DiskUsedNice[0] -eq $DiskUsedNice[1]) { $DiskUsedNice = $DiskUsedNice[0] } $Object = [PSCustomObject][ordered]@{ BiosDate = Get-Content "/sys/class/dmi/id/bios_date" BiosVendor = Get-Content "/sys/class/dmi/id/bios_vendor" BiosVerson = Get-Content "/sys/class/dmi/id/bios_version" CPU = $CPUData[0].Replace(" ","").Split(":")[1] CPUArchitecture = uname -p CPUThreads = ([int]$ThreadsPerCore * [int]$CorePerSocket) CPUCores = ($CorePerSocket * $Sockets) CPUSockets = $Sockets DistName = $DistName.Replace('"','') DistSupportURL = ($OSData | Where-Object {$_ -like "HOME_URL=*"}).TrimStart("HOME_URL=").Trim('"') DiskSizeGb = $DiskSizeNice DiskFreeGb = $DiskFreeNice DiskUsedGb = $DiskUsedNice GPU = $DisplayData DistVersion = $DistVersion.Replace('"','') KernelRelease = uname -r OS = uname -o RAM = $RAM } # Display results to user return $Object } |