Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Медленно работает скрипт (http://forum.oszone.net/showthread.php?t=308801)

svoboda1984 04-12-2015 22:21 2581527

Медленно работает скрипт
 
Существует такой скрипт на 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 секунду подобным методом. Если кто знает, объясните, в чём проблема. Почему именно эта часть работает так медленно, и как это исправить?

Iska 04-12-2015 23:18 2581538

Делайте вывод в одном цикле ForEach-Object.

svoboda1984 04-12-2015 23:59 2581554

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 без тормозов.

Kazun 05-12-2015 01:18 2581561

Т.к. запрашиваются все свойства, а для вычисления 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}


Days              : 0
Hours            : 0
Minutes          : 0
Seconds          : 1
Milliseconds      : 75
Ticks            : 10752407
TotalDays        : 1,24449155092593E-05
TotalHours        : 0,000298677972222222
TotalMinutes      : 0,0179206783333333
TotalSeconds      : 1,0752407
TotalMilliseconds : 1075,2407

Код:

PS >  measure-command {Get-WmiObject -Class Win32_Processor -Property Name,Description ,NumberOfCores , L2CacheSize ,
 L3CacheSize }


Days              : 0
Hours            : 0
Minutes          : 0
Seconds          : 0
Milliseconds      : 11
Ticks            : 118357
TotalDays        : 1,36987268518519E-07
TotalHours        : 3,28769444444444E-06
TotalMinutes      : 0,000197261666666667
TotalSeconds      : 0,0118357
TotalMilliseconds : 11,8357


Код:

Get-WmiObject -Class Win32_Processor  -Property Name,Description ,NumberOfCores , L2CacheSize ,L3CacheSize | ForEach-Object -Process {
 "ЦПУ: {0}" -f $_.Name
 "({0})" -f $_.Description
 "{0} Ядра Кэш 2: {1} Kb Кэш 3: {2} Kb " -f $_.NumberOfCores , $_.L2CacheSize , $_.L3CacheSize
}


svoboda1984 05-12-2015 01:56 2581567

Kazun, спасибо, всё быстро заработало. Просто я ещё не въехал в особенности PS. После bat реально путаюсь в определениях. А оказывается, всё весьма просто.


Время: 13:19.

Время: 13:19.
© OSzone.net 2001-