Тут очень простое задание из серии фаллометрии :-)
Задача:
Решение:
Тут нам потребуется WMI класс Win32_Processor. И из него выберем нужные данные. При этом я проверю, что значения не равны $null или нулю. Если это так, то в это поле впишу текст N/A для читабельности. Вот что получилось:
$Host.UI.RawUI.BackgroundColor = "Black" cls $processor = gwmi win32_processor | Select AddressWidth, L2CacheSize, L2CacheSpeed, L3CacheSize, L3CacheSpeed, MaxClockSpeed, Name, NumberOfCores, NumberOfLogicalProcessors $processor | gm -MemberType NoteProperty | %{ if ($processor.$($_.name) -eq $null -or $processor.$($_.name) -eq 0) {$processor.$($_.name) = "N/A"} } Write-Host 'Strength evaluation for LocalHost' -ForegroundColor Green Write-Host 'Speed ... ' $processor.MaxClockSpeed ` `nL2 Cache Size: $processor.L2CacheSize ` `nL2 Cache Speed: $processor.L2CacheSpeed ` `nL3 Cache Size: $processor.L3CacheSize ` `nL3 Cache Speed: $processor.L3CacheSpeed -ForegroundColor Yellow Write-Host Strength ... ` `nNumber of Cores: $processor.NumberOfCores ` `nNumber of Logical Processors: $processor.NumberOfLogicalProcessors ` `nName: ```````````` $processor.Name -ForegroundColor Magenta Write-Host Agility ... ` `nAddress Width: $processor.AddressWidth -ForegroundColor Cyan
И вот вывод:
[↓] [vPodans] $processor = gwmi win32_processor | Select AddressWidth, L2CacheSize, L2CacheSpeed, L3CacheSize, >> L3CacheSpeed, MaxClockSpeed, Name, NumberOfCores, NumberOfLogicalProcessors >> $processor | gm -MemberType NoteProperty | %{ >> if ($processor.$($_.name) -eq $null -or $processor.$($_.name) -eq 0) {$processor.$($_.name) = "N/A"} >> } >> Write-Host 'Strength evaluation for LocalHost' -ForegroundColor Green >> Write-Host 'Speed ... ' $processor.MaxClockSpeed ` >> `n'L2 Cache Size:' $processor.L2CacheSize ` >> `n'L2 Cache Speed:' $processor.L2CacheSpeed ` >> `n'L3 Cache Size:' $processor.L3CacheSize ` >> `n'L3 Cache Speed:' $processor.L3CacheSpeed -ForegroundColor Yellow >> Write-Host Strength ... ` >> `n'Number of Cores:' $processor.NumberOfCores ` >> `n'Number of Logical Processors:' $processor.NumberOfLogicalProcessors ` >> `n'Name: $processor.Name -ForegroundColor Magenta >> Write-Host Agility ... ` >> `n"Address Width: `t`t`t`t" $processor.AddressWidth -ForegroundColor Cyan >> Strength evaluation for LocalHost Speed ... 2834 L2 Cache Size: 6144 L2 Cache Speed: 2000 L3 Cache Size: N/A L3 Cache Speed: N/A Strength ... Number of Cores: 4 Number of Logical Processors: 4 Name: Intel(R) Core(TM)2 Quad CPU Q9550 @ 2.83GHz Agility ... Address Width: 64 [↓] [vPodans]
По всей видимости оно получилось как и требовалось.
И тут нас снова ждут соревнования. Здесь нам потребуется файл LongJump_Adv2.xls из Competitors Pack. Файл содержит данные об участниках прыжков в длину и результаты их 3-х попыток.
Задача:
Решение:
Вася Гусев решил окончательно сломать всем мозг разбором XLS в CSV, обработать его и собрать обратно в CSV – тиснуть сюда. Когда я это увидел – стало как-то не очень хорошо. Я решил работать прямо с XLS. И вот что у меня получилось:
# массив, который будет содержать результаты последней попытки прыжков, на основании # которых нужно вывести лучший результат $lastattempt = @() # создаём COM объект и прочую рутину. $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false $excel.Workbooks.Open('C:\Users\vPodans\LongJump_Adv2.xls') | Out-Null # у нас есть известное кол-во участников - 18. 19-я строка - это заголовки. # поэтому я исходя из этого решил работать с колонкой Result (8-я по счёту). Т.к. # некоторые попытки были провалены и в таблице стояли крестики. Чтобы вручную не парсить # это всё, я в ячейку воткнул экселовскую формулу MAX, которая всё за меня сделает. 2..19 | %{$excel.Cells.Item($_,8).Value2 = "=max(e$_`:g$_)" # заодно в $lastattempt запишем результат последней попытки для текущего прыгуна $lastattempt += $excel.Cells.Item($_,7).Value2 # сравниваем лучший результат за сегодня с результатом за сезон if ($excel.Cells.Item($_,8).Value2 -lt $excel.Cells.Item($_,4).Value2) { # и в соответствующую графу пишем результат $excel.Cells.Item($_,9).Value2 = "Under Perform" # вот тут пришлось использовать читы. Я не очень силён в custom sort в экселе, поэтому # рядышком я для каждого статуса Exceed/Achieve/.. я приписываю число. Вот по этому числу # я потом буду сортировать таблицу $excel.Cells.Item($_,10).Value2 = "3" } elseif ($excel.Cells.Item($_,8).Value2 -eq $excel.Cells.Item($_,4).Value2) { $excel.Cells.Item($_,9).Value2 = "Achieve" $excel.Cells.Item($_,10).Value2 = "2" } else { $excel.Cells.Item($_,9).Value2 = "Exceed" $excel.Cells.Item($_,10).Value2 = "1" } } # выбираем из LastAttempt лучший результат, попутно заменяя крестики на нолики (лол) и выводя лучший результат $lastattempt | %{if ($_ -eq "x") {$_ = 0};$_} | sort | select -last 1 # выбираем диапазон изменения таблицы при сортировке. Заголовки не трогаем, поэтому начинаем с 2 $selection = $excel.Range("a2:j19") # указываем колонку, по которой будем сортировать $range = $excel.Range("j2:j19") # сортируем [void]$selection.Sort($range,"1") # удаляем читерские числа, которые использовались для сортировки. 2..19 | %{$excel.Cells.Item($_,10).Value2 = ""} # готово. $excel.Save() $excel.Quit()
Не скажу, что получилось коротко и идеально, но задачу вполне решает.
Comments: