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