PowerShell: инструмент не только для сисадмина

Зачем нужен скриптовый язык от Microsoft.
3 минуты32473

Немного коснувшись Powershell в тексте про простейшие скрипты, мы уже убедились в том, что это достаточно простой и эффективный инструмент для выполнения повседневных задач. Однако понять истинные возможности PowerShell по нескольким примерам и поверхностному изучению категорически невозможно, ведь до определенного момента вас не покидает ощущение надуманной легкости. Так является ли PowerShell важным инструментом Windows или это игрушка для гиков? Давайте разбираться.

Краткая справка

PowerShell был официально запущен в 2006 году и был призван заменить сильно ограниченный интерпретатор командной строки cmd. Это уже была вторая попытка замены, выпущенный 8 годами ранее Windows Script Host провалился из-за отсутствия встроенной документации и отсутствия интеграции в оболочку.

Ну а PowerShell учел большинство ошибок своих предшественников, 3 года с момента презентации допиливался до пристойного вида и в итоге предстал перед армией системных администраторов в весьма приятном виде.

Командлеты на конвейере

Основа PowerShell — командлеты. Если вы хоть немного знаете английский язык, то уже поняли, что название «командлеты» происходят от красноречивого «cmdlet». Их структура включает в себя собственно команду (глагол) и объект (существительное). Например: Get-Process, Sort-Object, Rename-Item и так далее. Разделение, как видно, выполняется знаком «-». Есть ограниченный список командлетов, используемый системой по умолчанию, но начиная с версии PowerShell 2.0 вы можете самостоятельно создавать свои командлеты. Подробнее прочитать об этой процедуре вы можете на официальной странице Microsoft. Кстати, актуальная версия 5.1 вышла в августе прошлого года.

Другое базисное понятие в PowerShell — конвейер (Pipeline). Конвейер — процедура передачи выходных данных одного командлета в качестве входных следующего. Обозначается конвейер «|» , а на практике такая запись выглядит предельно просто:

Get-Process | Sort CM

Как видно из записи, в коде в конце каждой строки ставить «;» не надо, но данный знак можно использовать для разделения командлетов:

Get-Process; Get-Help

Все удобно и красиво.

Ну а главное в PowerShell — это конечно же скрипты. Здесь, как в любом уважающем себя языке высокого уровня имеются возможность работать с переменными, функциями, условными операторами, циклами, исключениями и т. д. В общем, существенных ограничений в функциональности вы не ощутите.

Удобство и скорость

Конечно, желая пойти навстречу своим клиентам и до предела облегчить им жизнь, огромная команда Microsoft создала удобный и понятный даже далекому от программирования человеку продукт. Вот представьте на минуту, что вы системный администратор в офисе. Вам надо проверить не занимаются ли сотрудники ерундой на рабочем месте. Проще всего это сделать, осуществив поиск и завершение «неправильного» процесса на компьютере в активного каталоге:

$proc = "Wrong_Proc"
$strCategory = "computer"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = ("(objectCategory=$strCategory)")
$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()


foreach ($objResult in $colResults)
{
$objComputer = $objResult.Properties
$objComputer.name
if (Test-Connection -Count 2 -ComputerName $objComputer.name -Quiet)
{
$ps = Get-WmiObject Win32_Process -Filter "Name='$proc'" -ComputerName $objComputer.name

foreach ($i in $ps)
{
$result = $i.Terminate()
if ($result.ReturnValue -eq 0) { "Success $comp"}
else {"Error $comp"}
}
}
}

 

Wromg_Proc — название искомого процесса, например, wmplayer.exe. Первая часть скрипта посвящена поиску нашего компьютера, вторая в AD, вторая — собственно работе с процессом. Несмотря на то, что визуально такая запись может оттолкнуть новичка, фактически со знанием английского можно легко расшифровать код.

Но за удобство , как это давно повелось, Microsoft пришлось заплатить немалую цену. Среди необходимых жертв и «гуляющий» синтаксис с упрощениями, который не позволяет новичкам свободно читать код своих более опытных коллег, и неоправданные вольности в оформлении, в том числе исходного кода. Но главное, чем приходится жертвовать — быстродействие. Код, исполняемый на PowerShell может быть в разы медленнее линуксового аналога bash. И если при работе только со своей машиной это не слишком заметно, то при обслуживании десятков и сотен удаленных компьютеров вы теряете часы времени вместо десятков минут.

Заверните со списком литературы

Не знаю, заинтересовались ли вы PowerShell по итогам этого опуса, но если да, то найти остальную информацию вам не составит труда. В отличие от многих других языков, в российском сегменте интернета очень много качественной информации по PowerShell для людей любого уровня подготовки.

Но начать следует с официальной странички, ибо где ещё вы найдёте точную актуальную информацию. Да, абсолютное большинство здесь на английском языке, любой подручный переводчик вам поможет во всём разобраться. Учебник, кстати, на русском.

Немало интересных и познавательных обучалок можно найти на Хабрахабр.

Готовые скрипты на любой вкус и несколько слов от создателей можно найти на горячо горячо любимом GitHub.

Интересную книгу для знакомства со средой можно абсолютно законно и бесплатно скачать здесь. Оговорка: книга довольно старая, охватить возможности вы сможете только до 2 версии. Или вот настольная книга с готовыми скриптами и комментариями. Очень пригодится практикующему сисадминщику и тому, кто интересуется языком для личных, но реальных дел.

Хотите стать веб-разработчиком? Тогда вам на интенсив по веб-разработке для начинающих!

sys_adminsysadminpowershellmicrosoft
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!