View
222
Download
0
Embed Size (px)
Citation preview
Microsoft TechDayshttp://www.techdays.ru
Разгоняем PowerShell
Дмитрий СотниковPowerShell MVPQuest Software
Microsoft TechDayshttp://www.techdays.ru
Что будем разгонять
1. Запуск PowerShell’a2. Получение объектов3. ForEach против ForEach4. Работу с большими файлами5. Работу с массивами
Microsoft TechDayshttp://www.techdays.ru
1. Запуск PowShell'a
На всех машинах с PowerShell v1: Запустить Update-GAC.ps1
Microsoft TechDayshttp://www.techdays.ru
Как будем замерять?
Microsoft TechDayshttp://www.techdays.ru
2. Получение объектов
Не доставайте ненужные объектыПараметры – хорошоWhere – плохо
Microsoft TechDayshttp://www.techdays.ru
Where – фильтруем «руками»
Get-Ball | where { $_.color -eq ‘Orange’ }
Microsoft TechDayshttp://www.techdays.ru
Параметры кмдлета
Get-Ball -Сolor ‘Orange’
Примеры
Get-QADUser | Where { $_.Enabled –and
$_.City -eq “Уфа”}
Get-QADUser -Enabled -City “Уфа”
3. foreach или ForEach-Objectforeach ($i in выражение) { $i }
выражение | ForEach-Object { $_ }
3. foreach или ForEach-Objectforeach ($i in выражение) { $i }
выражение | ForEach-Object { $i }
1. Вычисляет выражение2. Загружает его целиком в память3. Выполняет скриптблок для
элементов
3. foreach или ForEach-Objectforeach ($i in выражение) { $i }
выражение | ForEach-Object { $_ }
1. Передает объекты по одному2. Для каждого выполняет
скриптблок
Правильные примеры
foreach($i in $bigcollection) { $sum += $i.property }
Get-QADUser –Enabled | ForEach-Object { $count++ }
4. Чтение больших файлов
Get-Content big.log
Устанавливает буфер чтения (см. статью)
–Read 1000
На 75 MB:
gc test.txt | Where {$_ -like '*a*'} | Measure-Object
gc test.txt -read 1000 | ForEach-Object {$_} | Where {$_ -like '*a*'} | Measure-Object
В 3 раза быстрее!
Если нужен только текст...
select-string a.log -pattern $regex
16 секунд
Или Microsoft LogParser
egrep $regex a.log
0.2 секунды
Microsoft TechDayshttp://www.techdays.ru
5. Массивы и строки
Массивы и строки динамическиеПри расширении они пересоздаются
Удобно или быстро
$arr = @()for ($i=0;$i –lt 10000; $i++) {$arr += $i*5}
$arr = new-object int[] 10000for ($i=0;$i –lt 10000; $i++) {$arr[$i] = $i*5}
В 15 раз быстрее
Microsoft TechDayshttp://www.techdays.ru
Мы разогнали
1. Запуск PowerShell’a2. Получение объектов3. ForEach против ForEach4. Работу с большими файлами5. Работу с массивами
Microsoft TechDayshttp://www.techdays.ru
Ссылки по теме
Мои блоги:http://dmitrysotnikov.wordpress.comhttp://www.itcommunity.ru/blogs/dmitrysotnikov
Другие русские блоги по PowerShell:http://xaegr.wordpress.com/http://www.sysadmins.lv/ http://blogs.technet.com/abeshkov/
Инструментарий:http://powergui.org
Microsoft TechDayshttp://www.techdays.ru
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after
the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.