Как через Powershell получить информацию о компьютере


14 августа 2019


Получение данных в Powershell по оперативной памяти и CPU

Для получение информации о компьютере в Powershell, такой как CPU или температуре процессора есть два варианта. Первый способ вернет нам ограниченные данные по компьютеру, а второй, через WMI, вернет практически все, что есть в системе.

В первом варианту у нас отобразится большинство данных например таких, как процессор и оперативная память:

Get-ComputerInfo

Минус командлета в том, что он долго выполняется и имеет очень большой вывод. Мы можем отфильтровать свойства таким способом:

Get-ComputerInfo  -Property *proc*,*mem*

Так я получил информацию по CPU в powershell и оперативной памяти.

Powershell CPU оперативная память

Второй вариант это через WMI. О том как работать с wmi в powershell уже рассказывали, поэтому разбирать все в деталях не будем.

 

Получение информации об оперативной памяти в Powershell

Узнать информацию о памяти можно через отдельный класс "Win32_PhysicalMemory". Выполнив запрос к этому классу мы можем получить данные по серийному номеру, количестве планок, объем, частотность и многое другое. Запрос выполняется так:

Get-WmiObject -Class "Win32_PhysicalMemory"

powershell оперативная память

Так как информации много мы захотим ее отфильтровать, а объем преобразовать в гигабайты. Я выбрал в качестве свойства PurtNumber, но их может быть сколько угодно из колонки слева ( на рисунке выше):

Get-WmiObject Win32_PhysicalMemory | fl  PartNumber,@{Label="Capacity"; Expression={$_.Capacity / 1GB}}

Get-WmiObject оперативная память GB

Может мы хотим объединить все данные в один пункт, суммировав объем памяти. Это делается так:

Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | Foreach {"{0:N2}" -f ([math]::round(($_.Sum / 1GB),2))}

 

Получение данных по CPU в Powershell

Информацию по процессорам мы можем получить используя класс "Win32_Processor":

Get-WmiObject -Class Win32_Processor | select *

Powershell CPU

Если мы хотим получить в powershell температуру процессора то нужно использовать другой класс "MSAcpi_ThermalZoneTemperature":

Get-WmiObject -Class MSAcpi_ThermalZoneTemperature -Namespace "root/wmi"

Так как результат отображается в Kelvin * 10 нам нужно преобразовать это в температуру по цельсию. Один из вариантов такой:

function Get-Temperature {
    $t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi"
    $returntemp = @()

    foreach ($temp in $t.CurrentTemperature)
    {
    $cuTempKelvin = $temp / 10
    $cuTempCelsius = $cuTempKelvin - 273.15
    $returntemp += $cuTempCelsius.ToString() + " C "
    }
    return $returntemp
}

Get-Temperature

powershell температура процессора

Можно в powershell узнать температуру процессора и так:

$result = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" | select CurrentTemperature
$result | fl @{Label="Цельсий"; Expression={$_.CurrentTemperature / 10 - 273.15}}

 

Получение информации по материнской плате в Powershell

За материнскую плату отвечает класс "Win32_BaseBoard". Так мы выедем всю возможную информацию:

Get-WmiObject -Class "Win32_BaseBoard"

 

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.