Top Banner
Windows PowerShell Илья Бреев Синтек
30

PowerShell

Nov 07, 2014

Download

Technology

GetDev.NET

Материалы со встречи: http://getdev.net/Event/powershell
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PowerShell

Windows PowerShell

Илья Бреев

Синтек

Page 2: PowerShell

Что это такое?

Оболочка командной строки

Язык сценариев

Среда разработки на основе .NET Framework

Page 3: PowerShell

Что оно может?

• Всевозможные рутинные операции• Общие задачи администрирования• Управление любыми типами хранилищ

привычными методами• Управление службами и процессами• Работа с объектами прямо в командной

строке

Page 4: PowerShell

Немного истории…

Monad 2003

1.02006

2.02009

3.02012

А теперь обо всем по порядку

Page 5: PowerShell

Команды и командлеты• встроенные в оболочку• специальные .NET классы• отдельные задачи – отдельные процессы• можно создавать собственные• … но уже есть ~200 стандартных• формат глагол-существительное• «Используй объекты, Люк!»

Get-Command Write-*

Set-ExecutionPolicy

Write-Host

Page 6: PowerShell

КонвейерGet-Item * | Where { $_.PSIsContainer }

ls | foreach { $_.GetType().FullName}

или даже так…

Page 7: PowerShell

Функции

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

СкриптыМожно легко передавать параметры, делая их обязательными:

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

Рутинные задачи

Page 10: PowerShell

Еще немного рутины…

Page 11: PowerShell

Я СДЕЛАЮ ЭТО на bash

в 2 раза быстрее!

Page 12: PowerShell

А как насчет…

Транзакции(все или ничего)

Start-PSTransaction

New-ItemProperty –path HKCU:\Test –name Name –value “Test” –useTransaction

Get-ItemProperty HKCU:\Test –useTransaction

Complete-PSTransaction

Page 13: PowerShell

События

Использование привычной событийной модели в скриптах!

$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

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

Отладка скриптов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

Фоновые задачи$j = Start-Job -scriptblock { Get-Process }$result = Receive-Job -Job $j$result

Продолжаем решать насущные задачи в том же сеансе, сбросив что-то тяжелое в фон

Get-Job - можем быстро посмотреть список фоновых задач

Receive-Job –Id 1 – или посмотреть результаты по Id задачи

Page 17: PowerShell

Собственная ISEIntegrated Scripting Environment

Общий вид Возможности

• Подсветка синтаксиса• Отладка• Консоль• Несколько лэйаутов• Удаленный Shell

Page 18: PowerShell

И это всё Powershell 2.0…

А как же 3.0?

Page 19: PowerShell

3.0

• Улучшение синтаксиса• 2000+ стандартных командлетов• Запланированные задания• Вечноживые сессии• Работа через веб• Делегирование

Page 20: PowerShell

Как упростился синтаксис?

СталоGet-Process | Where PM –gt 100MB

Get-Process | Foreach Name

БылоGet-Process | Where { $_.PM –gt 100MB }

Get-Process | Foreach { $_.Name }

Page 21: PowerShell

Работа с планировщиком!$trigger = New-JobTrigger –Daily –At 3amRegister-ScheduledJob –Name MyJob –Trigger $trigger

–ScriptBlock{…}

Page 22: PowerShell

Покажите мне что-нибудь вкусное!

Это все было как-то неинтересно

Page 23: PowerShell

Обычный Out-GridViewА кнопки Ok и Cancel предназначены для перенаправления отфильтрованной таблицы дальше по пайпу!

Page 24: PowerShell

Нет, правда. Удивите меня!

Демонстрация экзотического скрипта на Powershell

Page 25: PowerShell

Выглядит красивоА как мне пользоваться моим скриптом?

Раньше исполнять скрипт было просто:

$ cat > script.sh << “EOF”#!/bin/bashecho Hello from my scriptEOF$ cmhod u+x script.sh$ ./script.sh

Page 26: PowerShell

А теперь?

Достаточно вызвать

> powershell.exe script.ps1

• На целевой для скрипта машине должна быть выставлена соответствующая политика исполнения скриптов

• При определенных условиях скрипт должен обладать цифровой подписью и издатель сертификата должен находиться в списке доверенных

Page 27: PowerShell

Политики исполнения

> Get-ExecutionPolicy> Set-ExecutionPolicy

• Restricted - политика по умолчанию – нельзя выполнять скрипты• AllSigned – все скрипты должны быть подписаны• RemoteSigned – скрипты, загруженные из сети, должны быть

подписаны• Unrestricted – можно выполнять любые скрипты• Bypass - Ничего не блокируется, и никакие предупреждения и

запросы не появляются• Undefined - если политика выполнения во всех областях имеет

значение Undefined, действует политика выполнения Restricted.

Page 28: PowerShell

Alternate Data Streams

• Метаданные, связанные с объектом файловой системы NTFS

• Используются AES (Attachment Execution Service) для сохранения данных об источнике загруженного файла

Page 29: PowerShell

Полезные ссылки

• 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

Спасибо за внимание!

Илья Бреев, Синтек• Email: [email protected]• Twitter: @ilyabreev• Github: https://github.com/ilyabreev