Open Ermakov-Alexey opened 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()
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>
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>
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())"
Если отработает нормально, то я добавлю его в основную ветку, как фикс для некоторых серверных ОС.
да, теперь работает правильно
да, теперь работает правильно
Поскольку на пикабу меня забанили аж до нового года, отвечаю здесь :-) Очень интересно скрипт показывает процессоры. Такое впечатление, что в случае с серверной ОС он их тоже хранит как массивы. Можете выполнить:
$CPUQuery = @(Get-CimInstance -Query "Select DeviceID, Manufacturer, SocketDesignation, Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed from Win32_Processor")
$CPUQuery | Select *
И выложить сюда результаты? Буду очень благодарен.
И выложить сюда результаты? Буду очень благодарен.
`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
`
После диалога на Пикабу, выполнил команду $MemDiagnostics = Get-CimInstance WIn32_PhysicalMemory $MemDiagnostics | Select * добавил ответ в файле MemDiagnostics.txt