alive-one / PowerShell-System-Hardware-Info

PowerShell script to collect major hardware and some software information on system and export in *.csv, *.xml, *.json, *.html and mysql database
Other
3 stars 0 forks source link

Supermicro #1

Open Ermakov-Alexey opened 4 months ago

Ermakov-Alexey commented 4 months ago

После диалога на Пикабу, выполнил команду $MemDiagnostics = Get-CimInstance WIn32_PhysicalMemory $MemDiagnostics | Select * добавил ответ в файле MemDiagnostics.txt

alive-one commented 4 months ago

После диалога на Пикабу, выполнил команду $MemDiagnostics = Get-CimInstance WIn32_PhysicalMemory $MemDiagnostics | Select * добавил ответ в файле MemDiagnostics.txt

Понятушки. Типичная ошибка типизации :-) В обычной клиентской винде, на которой тестировался скрипт, переменная $RAMSlotsCount хранит количество слотов памяти в uint16. А у вас же, на серверной, как я понимаю, это массив - System.Array, поскольку конфигурация памяти более сложная чем на обычных ПК. Вот такой код должен помочь

$RAMSlotsCount = (Get-CimInstance -Query "Select MemoryDevices from Win32_PhysicalMemoryArray")[0].MemoryDevices Write-Host "Memory Slots Count are $RAMSlotsCount" Write-Host "Memory Slots Count Variable Type is $($RAMSlotsCount.GetType())"

Отпишитесь пожалуйста, что он выведет.

P.S. И, ради интереса, что выведет вот такой код:

$RAMSlotsCount2 = (Get-CimInstance -Query "Select MemoryDevices from Win32_PhysicalMemoryArray" | Select-Object -ExpandProperty MemoryDevices) $RAMSlotsCount2 $RAMSlotsCount2.GetType()

Ermakov-Alexey commented 4 months ago

PS C:\Users\admin1> $RAMSlotsCount = (Get-CimInstance -Query "Select MemoryDevices from Win32_PhysicalMemoryArray")[0].MemoryDevices PS C:\Users\admin1> Write-Host "Memory Slots Count are $RAMSlotsCount" Memory Slots Count are 6 PS C:\Users\admin1> Write-Host "Memory Slots Count Variable Type is $($RAMSlotsCount.GetType())" Memory Slots Count Variable Type is uint16 PS C:\Users\admin1>

Ermakov-Alexey commented 4 months ago

PS C:\Users\admin1> $RAMSlotsCount2 = (Get-CimInstance -Query "Select MemoryDevices from Win32_PhysicalMemoryArray" | Select-Object -ExpandProperty MemoryDevices) PS C:\Users\admin1> $RAMSlotsCount2 6 6 6 6 PS C:\Users\admin1> $RAMSlotsCount2.GetType()

IsPublic IsSerial Name BaseType


True True Object[] System.Array

PS C:\Users\admin1>

alive-one commented 4 months ago

PS C:\Users\admin1> $RAMSlotsCount2 = (Get-CimInstance -Query "Select MemoryDevices from Win32_PhysicalMemoryArray" | Select-Object -ExpandProperty MemoryDevices) PS C:\Users\admin1> $RAMSlotsCount2 6 6 6 6 PS C:\Users\admin1> $RAMSlotsCount2.GetType()

IsPublic IsSerial Name BaseType

True True Object[] System.Array

PS C:\Users\admin1>

Ладно, поcкольу просто посчитать DeviceLocator'ы будет неправильно (ведь у вас 24 слота, а выводится информация только о 22) и свойство MemoryDevices, похоже, единственное, которое возвращает верное количество физических слотов, но просто по другому организованное в случае с серверными ОС ввиду более сложной организации памяти на серверах, то мы ему просто немного поможем.

Выполните, пожалуйста, следующий код:

$RAMSlotsCount = (Get-CimInstance -Query "Select MemoryDevices from Win32_PhysicalMemoryArray").MemoryDevices

if ($RAMSlotsCount -is [System.Array]) { [int]$RAMSlotsCount = ($RAMSlotsCount | Measure-Object -Sum).Sum }

Write-Host "Memory Slots Count Are: $RAMSlotsCount"

Write-Host "Variable Type is $($RAMSlotsCount.GetType())"

Если отработает нормально, то я добавлю его в основную ветку, как фикс для некоторых серверных ОС.

Ermakov-Alexey commented 4 months ago

да, теперь работает правильно image

alive-one commented 3 months ago

да, теперь работает правильно image

Поскольку на пикабу меня забанили аж до нового года, отвечаю здесь :-) Очень интересно скрипт показывает процессоры. Такое впечатление, что в случае с серверной ОС он их тоже хранит как массивы. Можете выполнить:

$CPUQuery = @(Get-CimInstance -Query "Select DeviceID, Manufacturer, SocketDesignation, Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed from Win32_Processor")

$CPUQuery | Select *

И выложить сюда результаты? Буду очень благодарен.

Ermakov-Alexey commented 1 month ago

И выложить сюда результаты? Буду очень благодарен.

`PS C:\Users\admin1> $CPUQuery = @(Get-CimInstance -Query "Select DeviceID, Manufacturer, SocketDesignation, Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed from Win32_Processor") PS C:\Users\admin1> PS C:\Users\admin1> $CPUQuery | Select *

Availability : CpuStatus : CurrentVoltage : DeviceID : CPU0 ErrorCleared : ErrorDescription : LastErrorCode : LoadPercentage : Status : StatusInfo : AddressWidth : DataWidth : ExtClock : L2CacheSize : L2CacheSpeed : MaxClockSpeed : 2201 PowerManagementSupported : ProcessorType : Revision : SocketDesignation : CPU1 Version : VoltageCaps : Caption : Description : InstallDate : Name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz ConfigManagerErrorCode : ConfigManagerUserConfig : CreationClassName : PNPDeviceID : PowerManagementCapabilities : SystemCreationClassName : SystemName : CurrentClockSpeed : Family : OtherFamilyDescription : Role : Stepping : UniqueId : UpgradeMethod : Architecture : AssetTag : Characteristics : L3CacheSize : L3CacheSpeed : Level : Manufacturer : GenuineIntel NumberOfCores : 22 NumberOfEnabledCore : NumberOfLogicalProcessors : 44 PartNumber : ProcessorId : SecondLevelAddressTranslationExtensions : SerialNumber : ThreadCount : VirtualizationFirmwareEnabled : VMMonitorModeExtensions : PSComputerName : CimClass : root/cimv2:Win32_Processor CimInstanceProperties : {Caption, Description, InstallDate, Name...} CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties

Availability : CpuStatus : CurrentVoltage : DeviceID : CPU1 ErrorCleared : ErrorDescription : LastErrorCode : LoadPercentage : Status : StatusInfo : AddressWidth : DataWidth : ExtClock : L2CacheSize : L2CacheSpeed : MaxClockSpeed : 2201 PowerManagementSupported : ProcessorType : Revision : SocketDesignation : CPU2 Version : VoltageCaps : Caption : Description : InstallDate : Name : Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz ConfigManagerErrorCode : ConfigManagerUserConfig : CreationClassName : PNPDeviceID : PowerManagementCapabilities : SystemCreationClassName : SystemName : CurrentClockSpeed : Family : OtherFamilyDescription : Role : Stepping : UniqueId : UpgradeMethod : Architecture : AssetTag : Characteristics : L3CacheSize : L3CacheSpeed : Level : Manufacturer : GenuineIntel NumberOfCores : 22 NumberOfEnabledCore : NumberOfLogicalProcessors : 44 PartNumber : ProcessorId : SecondLevelAddressTranslationExtensions : SerialNumber : ThreadCount : VirtualizationFirmwareEnabled : VMMonitorModeExtensions : PSComputerName : CimClass : root/cimv2:Win32_Processor CimInstanceProperties : {Caption, Description, InstallDate, Name...} CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties

`