Download - PowerShell
![Page 1: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/1.jpg)
Windows PowerShell
Илья Бреев
Синтек
![Page 2: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/2.jpg)
Что это такое?
Оболочка командной строки
Язык сценариев
Среда разработки на основе .NET Framework
![Page 3: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/3.jpg)
Что оно может?
• Всевозможные рутинные операции• Общие задачи администрирования• Управление любыми типами хранилищ
привычными методами• Управление службами и процессами• Работа с объектами прямо в командной
строке
![Page 4: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/4.jpg)
Немного истории…
Monad 2003
1.02006
2.02009
3.02012
А теперь обо всем по порядку
![Page 5: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/5.jpg)
Команды и командлеты• встроенные в оболочку• специальные .NET классы• отдельные задачи – отдельные процессы• можно создавать собственные• … но уже есть ~200 стандартных• формат глагол-существительное• «Используй объекты, Люк!»
Get-Command Write-*
Set-ExecutionPolicy
Write-Host
![Page 6: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/6.jpg)
КонвейерGet-Item * | Where { $_.PSIsContainer }
ls | foreach { $_.GetType().FullName}
или даже так…
![Page 7: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/7.jpg)
Функции
function TopBots { Write-Host "Top 5 bots:" & $parser -stats:OFF -q:ON "SELECT TOP 5
SUBSTR(cs(User-Agent), 0, 100) AS user_agent, COUNT(*) AS cnt
FROM $log WHERE user_agent LIKE '%bot%' OR
user_agent LIKE '%spider%' GROUP BY user_agent ORDER BY cnt DESC" }
![Page 8: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/8.jpg)
СкриптыМожно легко передавать параметры, делая их обязательными:
param([string] $parser=$(throw “I need my parser”),[string] $log=$(throw “I need my log”)
)
Файлы скриптов *.ps1 интерпретируются вызовом powershell.exe … в том числе, из самого powershell
& powershell.exe myscript.ps1
![Page 9: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/9.jpg)
Рутинные задачи
![Page 10: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/10.jpg)
Еще немного рутины…
![Page 11: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/11.jpg)
Я СДЕЛАЮ ЭТО на bash
в 2 раза быстрее!
![Page 12: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/12.jpg)
А как насчет…
Транзакции(все или ничего)
Start-PSTransaction
New-ItemProperty –path HKCU:\Test –name Name –value “Test” –useTransaction
Get-ItemProperty HKCU:\Test –useTransaction
Complete-PSTransaction
![Page 13: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/13.jpg)
События
Использование привычной событийной модели в скриптах!
$timer = New-Object System.Timers.Timer$timer.Interval = 3000$timer.Enabled = trueRegister-ObjectEvent $timer “Elapsed”
-SourceIdentifier “Timer.Elapsed” –Action {
Write-Host Elapsed! Unregister-PsEvent “Timer.Elapsed”
}
![Page 14: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/14.jpg)
Try-Catch-Finally$wc = New-Object System.Net.WebClient$urls = “http://getdev.net”, “http://sintek.biz”foreach ($url in $urls){
try{
$url$result = $wc.DownloadString($url)
}catch [System.Net.WebException]{
$_.Exception.ToString()}
}
![Page 15: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/15.jpg)
Отладка скриптовfunction Test-Cmdlet {
Write-Host “Test!” }}
Set-PSBreakpoint –command Test-CmdletTest-Cmdlet
А также… Disable-PsBreakpoint, Get-PsBreakpoint, Remove-PsBreakpoint, Set-PsDebug, Set-Strictmode, Write-Debug, Write-Verbose, Enable-PsBreakpoint, Get-PsCallStack
![Page 16: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/16.jpg)
Фоновые задачи$j = Start-Job -scriptblock { Get-Process }$result = Receive-Job -Job $j$result
Продолжаем решать насущные задачи в том же сеансе, сбросив что-то тяжелое в фон
Get-Job - можем быстро посмотреть список фоновых задач
Receive-Job –Id 1 – или посмотреть результаты по Id задачи
![Page 17: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/17.jpg)
Собственная ISEIntegrated Scripting Environment
Общий вид Возможности
• Подсветка синтаксиса• Отладка• Консоль• Несколько лэйаутов• Удаленный Shell
![Page 18: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/18.jpg)
И это всё Powershell 2.0…
А как же 3.0?
![Page 19: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/19.jpg)
3.0
• Улучшение синтаксиса• 2000+ стандартных командлетов• Запланированные задания• Вечноживые сессии• Работа через веб• Делегирование
![Page 20: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/20.jpg)
Как упростился синтаксис?
СталоGet-Process | Where PM –gt 100MB
Get-Process | Foreach Name
БылоGet-Process | Where { $_.PM –gt 100MB }
Get-Process | Foreach { $_.Name }
![Page 21: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/21.jpg)
Работа с планировщиком!$trigger = New-JobTrigger –Daily –At 3amRegister-ScheduledJob –Name MyJob –Trigger $trigger
–ScriptBlock{…}
![Page 22: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/22.jpg)
Покажите мне что-нибудь вкусное!
Это все было как-то неинтересно
![Page 23: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/23.jpg)
Обычный Out-GridViewА кнопки Ok и Cancel предназначены для перенаправления отфильтрованной таблицы дальше по пайпу!
![Page 24: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/24.jpg)
Нет, правда. Удивите меня!
Демонстрация экзотического скрипта на Powershell
![Page 25: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/25.jpg)
Выглядит красивоА как мне пользоваться моим скриптом?
Раньше исполнять скрипт было просто:
$ cat > script.sh << “EOF”#!/bin/bashecho Hello from my scriptEOF$ cmhod u+x script.sh$ ./script.sh
![Page 26: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/26.jpg)
А теперь?
Достаточно вызвать
> powershell.exe script.ps1
• На целевой для скрипта машине должна быть выставлена соответствующая политика исполнения скриптов
• При определенных условиях скрипт должен обладать цифровой подписью и издатель сертификата должен находиться в списке доверенных
![Page 27: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/27.jpg)
Политики исполнения
> Get-ExecutionPolicy> Set-ExecutionPolicy
• Restricted - политика по умолчанию – нельзя выполнять скрипты• AllSigned – все скрипты должны быть подписаны• RemoteSigned – скрипты, загруженные из сети, должны быть
подписаны• Unrestricted – можно выполнять любые скрипты• Bypass - Ничего не блокируется, и никакие предупреждения и
запросы не появляются• Undefined - если политика выполнения во всех областях имеет
значение Undefined, действует политика выполнения Restricted.
![Page 28: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/28.jpg)
Alternate Data Streams
• Метаданные, связанные с объектом файловой системы NTFS
• Используются AES (Attachment Execution Service) для сохранения данных об источнике загруженного файла
![Page 29: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/29.jpg)
Полезные ссылки
• http://technet.microsoft.com/ru-ru/library/bb978526.aspx Windows Powershell на Technet
• http://blogs.msdn.com/b/powershell/ Блог разработчиков Powershell
• http://alexwhite.ru/wp-content/uploads/2011/06/posh.pdf Книга «Эффективное программирование в Windows Powershell»
• http://habrahabr.ru/post/137884/ Пост о подписывании скриптов для Powershell
• https://github.com/ilyabreev/ps-script-signing-sublime2 Репозиторий плагина к Sublime Text 2 для подписывания скриптов
![Page 30: PowerShell](https://reader033.vdocuments.site/reader033/viewer/2022061113/545ca11caf7959b9098b48a3/html5/thumbnails/30.jpg)
Спасибо за внимание!
Илья Бреев, Синтек• Email: [email protected]• Twitter: @ilyabreev• Github: https://github.com/ilyabreev