function Get-Hardware { param ( $ComputerName, $Port = 8443, $User = "rest", $Pass = "api" ) if ($null -eq $ComputerName) { $Collection = New-Object System.Collections.Generic.List[System.Object] $SYS = Get-CimInstance Win32_ComputerSystem $BootTime = Get-CimInstance -ComputerName $srv Win32_OperatingSystem | Select-Object LocalDateTime,LastBootUpTime $Uptime = ([string]($BootTime.LocalDateTime - $BootTime.LastBootUpTime) -split ":")[0,1] -join ":" $OS = Get-CimInstance Win32_OperatingSystem $BB = Get-CimInstance Win32_BaseBoard $BBv = $BB.Manufacturer+" "+$BB.Product+" "+$BB.Version $CPU = Get-CimInstance Win32_Processor | Select-Object Name, @{Label="Core"; Expression={$_.NumberOfCores}}, @{Label="Thread"; Expression={$_.NumberOfLogicalProcessors}} $CPU_Use_Proc = [string]((Get-CimInstance Win32_PerfFormattedData_PerfOS_Processor -ErrorAction Ignore | Where-Object name -eq "_Total").PercentProcessorTime)+" %" $GetProcess = Get-Process $Process_Count = $GetProcess.Count $Threads_Count = $GetProcess.Threads.Count $Handles_Count = ($GetProcess.Handles | Measure-Object -Sum).Sum $ws = ((($GetProcess).WorkingSet | Measure-Object -Sum).Sum/1gb).ToString("0.00 GB") $pm = ((($GetProcess).PM | Measure-Object -Sum).Sum/1gb).ToString("0.00 GB") $Memory = Get-CimInstance Win32_OperatingSystem $MemUse = $Memory.TotalVisibleMemorySize - $Memory.FreePhysicalMemory $MEM = Get-CimInstance Win32_PhysicalMemory | Select-Object Manufacturer,PartNumber, ConfiguredClockSpeed,@{Label="Memory"; Expression={[string]($_.Capacity/1Mb)}} $MEMs = $MEM.Memory | Measure-Object -Sum $PhysicalDisk = Get-CimInstance Win32_DiskDrive | Select-Object Model, @{Label="Size"; Expression={[int]($_.Size/1Gb)}} $PDs = $PhysicalDisk.Size | Measure-Object -Sum $LogicalDisk = Get-CimInstance Win32_logicalDisk | Where-Object {$null -ne $_.Size} | Select-Object @{ Label="Value"; Expression={$_.DeviceID}}, @{Label="AllSize"; Expression={ ([int]($_.Size/1Gb))}},@{Label="FreeSize"; Expression={ ([int]($_.FreeSpace/1Gb))}}, @{Label="Free%"; Expression={ [string]([int]($_.FreeSpace/$_.Size*100))+" %"}} $LDs = $LogicalDisk.AllSize | Measure-Object -Sum $IOps = Get-CimInstance Win32_PerfFormattedData_PerfDisk_PhysicalDisk -ErrorAction Ignore | Where-Object { $_.Name -eq "_Total" } | Select-Object Name,PercentDiskTime,PercentIdleTime, PercentDiskWriteTime,PercentDiskReadTime,CurrentDiskQueueLength,DiskBytesPersec,DiskReadBytesPersec, DiskReadsPersec,DiskTransfersPersec,DiskWriteBytesPersec,DiskWritesPersec $VideoCard = Get-CimInstance Win32_VideoController | Select-Object @{ Label="VideoCard"; Expression={$_.Name}}, @{Label="Display"; Expression={ [string]$_.CurrentHorizontalResolution+"x"+[string]$_.CurrentVerticalResolution}}, @{Label="vRAM"; Expression={($_.AdapterRAM/1Gb)}} $VCs = $VideoCard.vRAM | Measure-Object -Sum $NetworkAdapter = Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true $NAs = $NetworkAdapter | Measure-Object $Collection.Add([PSCustomObject]@{ Host = $SYS.Name Uptime = $uptime BootTime = $BootTime.LastBootUpTime Owner = $SYS.PrimaryOwnerName OS = $OS.Caption Motherboard = $BBv Processor = $CPU[0].Name Core = $CPU[0].Core Thread = $CPU[0].Thread CPU = $CPU_Use_Proc ProcessCount = $Process_Count ThreadsCount = $Threads_Count HandlesCount = $Handles_Count MemoryAll = [string]$($MEMs.Sum/1Kb)+" GB" MemoryUse = ($MemUse/1mb).ToString("0.00 GB") WorkingSet = $ws PageMemory = $pm MemorySlots = $MEMs.Count PhysicalDiskCount = $PDs.Count PhysicalDiskAllSize = [string]$PDs.Sum+" Gb" LogicalDiskCount = $LDs.Count LogicalDiskAllSize = [string]$LDs.Sum+" Gb" DiskTotalTime = [string]$IOps.PercentDiskTime+" %" VideoCardCount = $VCs.Count VideoCardAllSize = [string]$VCs.Sum+" Gb" NetworkAdapterEnableCount = $NAs.Count }) $Collection } else { $url = "http://$ComputerName"+":$Port/api/hardware" $EncodingCred = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("${User}:${Pass}")) $Headers = @{"Authorization" = "Basic ${EncodingCred}"} try { Invoke-RestMethod -Headers $Headers -Uri $url } catch { Write-Error "Error connection" } } }