![]() |
Медленно работает скрипт
Существует такой скрипт на ps:
Get-WmiObject -Class Win32_Processor | ForEach-Object -Process { "ЦПУ: {0}" -f $_.Name } Get-WmiObject -Class Win32_Processor | ForEach-Object -Process { " ({0})" -f $_.Description } Get-WmiObject -Class Win32_Processor | ForEach-Object -Process { " {0} Ядра Кэш 2: {1} Kb Кэш 3: {2} Kb " -f $_.NumberOfCores , $_.L2CacheSize , $_.L3CacheSize } Он показывает информацию в удобном для меня виде. Но работает очень медленно, секунды 3. Это только часть общего скрипта, где-то 1/10 часть. Остальной кусок выводит информацию за 1 секунду подобным методом. Если кто знает, объясните, в чём проблема. Почему именно эта часть работает так медленно, и как это исправить? |
Делайте вывод в одном цикле ForEach-Object.
|
Iska, Это не ответ. Например вот этот код:
Get-WmiObject -Class Win32_PhysicalMemory | ForEach-Object -Process { "{0} {1} {2} {3} MHz Размер: {4:n} Gb" -f $_.BankLabel, $_.DeviceLocator, $_.PartNumber, $_.Speed, $($_.Capacity / 1Gb) } Get-WmiObject -Class Win32_PhysicalMemoryArray | ForEach-Object -Process { " Количeство слотов: {0}" -f $_.MemoryDevices } Get-WmiObject -Class Win32_PhysicalMemoryArray | ForEach-Object -Process { " Максимальный размер памяти: {0} Gb" -f $($_.MaxCapacity / 1Mb) } Отрабатывает за полсекунды. Тормоза именно в Win32_Processor. Может кто сталкивался с такой проблемой? У меня даже идей нет, почему он тормозит при обработке инфы процессора. Либо посоветуйте альтернативный вывод, чтоб его можно было использовать в powershell без тормозов. |
Т.к. запрашиваются все свойства, а для вычисления LoadPercentage требуется примерно 1 секунда и три вызовова, то и получается примерно 3 секунды и больше.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx Load capacity of each processor, averaged to the last second. Processor loading refers to the total computing burden for each processor at one time. This property is inherited from CIM_Processor. Код:
PS > measure-command {Get-WmiObject -Class Win32_Processor -Property LoadPercentage} Код:
PS > measure-command {Get-WmiObject -Class Win32_Processor -Property Name,Description ,NumberOfCores , L2CacheSize , Код:
Get-WmiObject -Class Win32_Processor -Property Name,Description ,NumberOfCores , L2CacheSize ,L3CacheSize | ForEach-Object -Process { |
Kazun, спасибо, всё быстро заработало. Просто я ещё не въехал в особенности PS. После bat реально путаюсь в определениях. А оказывается, всё весьма просто.
|
Время: 13:19. |
Время: 13:19.
© OSzone.net 2001-