PowerShell

1,198 views
1,097 views

Published on

Материалы со встречи: http://getdev.net/Event/powershell

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,198
On SlideShare
0
From Embeds
0
Number of Embeds
176
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

PowerShell

  1. 1. Windows PowerShell Илья Бреев Синтек
  2. 2. Что это такое? Оболочка командной строки Язык сценариев Среда разработки наоснове .NET Framework
  3. 3. Что оно может?• Всевозможные рутинные операции• Общие задачи администрирования• Управление любыми типами хранилищ привычными методами• Управление службами и процессами• Работа с объектами прямо в командной строке
  4. 4. Немного истории…Monad 1.0 2.0 3.02003 2006 2009 2012 А теперь обо всем по порядку
  5. 5. Команды и командлеты • встроенные в оболочку • специальные .NET классы • отдельные задачи – отдельные процессы • можно создавать собственные • … но уже есть ~200 стандартных • формат глагол-существительное • «Используй объекты, Люк!» Get-Command Write-* Set-ExecutionPolicy Write-Host
  6. 6. Конвейер Get-Item * | Where { $_.PSIsContainer }или даже так… ls | foreach { $_.GetType().FullName}
  7. 7. Функции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"}
  8. 8. СкриптыМожно легко передавать параметры, делая их обязательными:param([string] $parser=$(throw “I need my parser”), [string] $log=$(throw “I need my log”))Файлы скриптов *.ps1 интерпретируются вызовом powershell.exe … в том числе, из самого powershell& powershell.exe myscript.ps1
  9. 9. Рутинные задачи
  10. 10. Еще немного рутины…
  11. 11. Я СДЕЛАЮ ЭТО на bashв 2 раза быстрее!
  12. 12. А как насчет… Транзакции (все или ничего) Start-PSTransactionNew-ItemProperty –path HKCU:Test –name Name –value “Test” –useTransaction Get-ItemProperty HKCU:Test –useTransaction Complete-PSTransaction
  13. 13. События Использование привычной событийной модели в скриптах!$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”}
  14. 14. 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() }}
  15. 15. Отладка скриптов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
  16. 16. Фоновые задачи$j = Start-Job -scriptblock { Get-Process }$result = Receive-Job -Job $j$resultПродолжаем решать насущные задачи в том же сеансе, сбросив что-то тяжелое в фонGet-Job - можем быстро посмотреть список фоновых задачReceive-Job –Id 1 – или посмотреть результаты по Id задачи
  17. 17. Собственная ISEIntegrated Scripting EnvironmentОбщий вид Возможности • Подсветка синтаксиса • Отладка • Консоль • Несколько лэйаутов • Удаленный Shell
  18. 18. И это всё Powershell 2.0… А как же 3.0?
  19. 19. 3.0• Улучшение синтаксиса• 2000+ стандартных командлетов• Запланированные задания• Вечноживые сессии• Работа через веб• Делегирование
  20. 20. Как упростился синтаксис? Стало Get-Process | Where PM –gt 100MB Get-Process | Foreach Name БылоGet-Process | Where { $_.PM –gt 100MB } Get-Process | Foreach { $_.Name }
  21. 21. Работа с планировщиком!$trigger = New-JobTrigger –Daily –At 3amRegister-ScheduledJob –Name MyJob –Trigger $trigger –ScriptBlock{…}
  22. 22. Покажите мне что-нибудь вкусное!Это все было как-то неинтересно
  23. 23. Обычный Out-GridViewА кнопки Ok и Cancel предназначены для перенаправленияотфильтрованной таблицы дальше по пайпу!
  24. 24. Нет, правда. Удивите меня! Демонстрация экзотического скрипта на Powershell
  25. 25. Выглядит красивоА как мне пользоваться моим скриптом?Раньше исполнять скрипт было просто:$ cat > script.sh << “EOF”#!/bin/bashecho Hello from my scriptEOF$ cmhod u+x script.sh$ ./script.sh
  26. 26. А теперь?Достаточно вызвать> powershell.exe script.ps1• На целевой для скрипта машине должна быть выставлена соответствующая политика исполнения скриптов• При определенных условиях скрипт должен обладать цифровой подписью и издатель сертификата должен находиться в списке доверенных
  27. 27. Политики исполнения> Get-ExecutionPolicy> Set-ExecutionPolicy• Restricted - политика по умолчанию – нельзя выполнять скрипты• AllSigned – все скрипты должны быть подписаны• RemoteSigned – скрипты, загруженные из сети, должны быть подписаны• Unrestricted – можно выполнять любые скрипты• Bypass - Ничего не блокируется, и никакие предупреждения и запросы не появляются• Undefined - если политика выполнения во всех областях имеет значение Undefined, действует политика выполнения Restricted.
  28. 28. Alternate Data Streams• Метаданные, связанные с объектом файловой системы NTFS• Используются AES (Attachment Execution Service) для сохранения данных об источнике загруженного файла
  29. 29. Полезные ссылки• 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 для подписывания скриптов
  30. 30. Спасибо за внимание! Илья Бреев, Синтек• Email: ilyabreev@gmail.com• Twitter: @ilyabreev• Github: https://github.com/ilyabreev

×