2. Что это такое?
Оболочка командной
строки
Язык сценариев
Среда разработки на
основе .NET Framework
3. Что оно может?
• Всевозможные рутинные операции
• Общие задачи администрирования
• Управление любыми типами хранилищ
привычными методами
• Управление службами и процессами
• Работа с объектами прямо в командной
строке
5. Команды и командлеты
• встроенные в оболочку
• специальные .NET классы
• отдельные задачи – отдельные процессы
• можно создавать собственные
• … но уже есть ~200 стандартных
• формат глагол-существительное
• «Используй объекты, Люк!»
Get-Command Write-*
Set-ExecutionPolicy
Write-Host
6. Конвейер
Get-Item * | Where { $_.PSIsContainer }
или даже так…
ls | foreach { $_.GetType().FullName}
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. Скрипты
Можно легко передавать параметры, делая их обязательными:
param([string] $parser=$(throw “I need my parser”),
[string] $log=$(throw “I need my log”)
)
Файлы скриптов *.ps1 интерпретируются вызовом powershell.exe
… в том числе, из самого powershell
& powershell.exe myscript.ps1
16. Фоновые задачи
$j = Start-Job -scriptblock { Get-Process }
$result = Receive-Job -Job $j
$result
Продолжаем решать насущные задачи в том же сеансе, сбросив что-то
тяжелое в фон
Get-Job - можем быстро посмотреть список фоновых задач
Receive-Job –Id 1 – или посмотреть результаты по Id задачи
17. Собственная ISE
Integrated Scripting Environment
Общий вид Возможности
• Подсветка синтаксиса
• Отладка
• Консоль
• Несколько лэйаутов
• Удаленный Shell
20. Как упростился синтаксис?
Стало
Get-Process | Where PM –gt 100MB
Get-Process | Foreach Name
Было
Get-Process | Where { $_.PM –gt 100MB }
Get-Process | Foreach { $_.Name }
21. Работа с планировщиком!
$trigger = New-JobTrigger –Daily –At 3am
Register-ScheduledJob –Name MyJob –Trigger $trigger
–ScriptBlock
{
…
}
25. Выглядит красиво
А как мне пользоваться моим скриптом?
Раньше исполнять скрипт было просто:
$ cat > script.sh << “EOF”
#!/bin/bash
echo Hello from my script
EOF
$ cmhod u+x script.sh
$ ./script.sh
26. А теперь?
Достаточно вызвать
> powershell.exe script.ps1
• На целевой для скрипта машине должна быть выставлена
соответствующая политика исполнения скриптов
• При определенных условиях скрипт должен обладать
цифровой подписью и издатель сертификата должен
находиться в списке доверенных
27. Политики исполнения
> Get-ExecutionPolicy
> Set-ExecutionPolicy
• Restricted - политика по умолчанию – нельзя выполнять
скрипты
• AllSigned – все скрипты должны быть подписаны
• RemoteSigned – скрипты, загруженные из сети, должны быть
подписаны
• Unrestricted – можно выполнять любые скрипты
• Bypass - Ничего не блокируется, и никакие предупреждения и
запросы не появляются
• Undefined - если политика выполнения во всех областях имеет
значение Undefined, действует политика выполнения
Restricted.
28. Alternate Data Streams
• Метаданные, связанные с объектом
файловой системы NTFS
• Используются AES (Attachment Execution
Service) для сохранения данных об
источнике загруженного файла
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 для подписывания
скриптов