Краткий учебник основ Powershell

Несколько лет назад мною писались заметки по Powershell.

В данном документе я их систематизирую и актуализирую.

На дворе конец 2016 года.

 

1.       Знакомство

Основная конструкция языка глагол-существительное.

Простые примеры:

Get-Help – вывести справку.

Get-Process – вывести список процессов.

Get-Command – вывести команды.

 

Передача параметров происходит через дефис «.

Вывод команд с глаголом «Get»:

Get-CommandVerb Get

Вывод команд с существительным «Event»:

Get-CommandNoun event

Неявная передача параметра команде Get-help (справка по команде):

Get-Help Get-Event

Get-Help Get-Event –Detailed

Get-Help Get-Event -Full

Get-Help Get-Event -Examples

Список модулей в Powershell:

Get-Module –ListAvailable

Вывести все команды из модуля «NetTCPIP»:

Get-CommandModule NetTCPIP

Обновить справку(необходимо подключение к интернету и права администратора):

Update-Help

 

2.       Конвейер и управление сервисами

Вывод порционно:

Get-Command | more

С сортировкой по столбцу Version:

Get-Command | Sort-Object Version

С сортировкой + вывод первых 50 строк:

Get-Command | Sort-Object Version | Select-Object -First 50

Вывести свойства и методы объектов:

Get-Service | Get-Member

Вывести только методы:

Get-Service | Get-Member -MemberType Method

Перенаправление вывода в файл:

Get-Service | Out-File "C:\test.txt"

Управление сервисом(с правами администратора):

Выбрали сервис:

Get-Service -Name AdobeARMservice

Что мы можем с ним делать:

Get-Command -Noun service

Рестартуем сервис:

Restart-Service AdobeARMservice

 

3.       Работа с файловой системой

Какие есть команды для работы с файловой системой:

Get-Command -Noun item

Посмотреть содержимое директории(аналогично dir):

Get-ChildItem "C:\Program Files\7-Zip\"

Посмотреть все файлы по маске .exe, Recurse – вернет объекты, Force – покажет скрытые.

Get-ChildItem "C:\Program Files\7-Zip\" -Include *.exe -Recurse –Force

Удалить файл:

Remove-Item "C:\test.txt"

Создать папку:

New-Item -Path 'C:\temp\testfolder' -ItemType "directory"

Создать файл:

New-Item -Path 'C:\temp\testfolder\testfile.txt' -ItemType "file"

Удалить папку и содержимое:

Remove-Item 'C:\temp\testfolder' –Recurse

Работа со столбцами(оба примера равнозначны):

Для обработки используется конструкция @{}.

Ей передается аргумент в виде названия столбца n="Kbytes";

Далее происходит обработка столбца e={$PSItem.Length/1024}

$PSItem и $_ - ссылки на текущий объект.

Get-ChildItem "C:\Program Files\7-Zip\" | Select-Object -Property Name, Length, @{n="Kbytes"; e={$PSItem.Length/1024}}

Get-ChildItem "C:\Program Files\7-Zip\" | Select-Object -Property Name, Length, @{n="Kbytes"; e={$_.Length/1024}}

Вывод по маске в столбце:

Get-ChildItem "C:\Program Files\7-Zip\" | Where-Object Name -Like "7z*"

Операторы сравнения:

-eq         Equal     Равно

-ne         Not equal           Не Равно

-ge         Greater than or equal   Больше или Равно

-gt          Greater than     Больше

-lt           Less than            Меньше

-le          Less than or equal          Меньше или Равно

-like       Wildcard comparison     Использование символов подстановки для поиска соответствия образцу

-notlike                Wildcard comparison     Использование символов подстановки для поиска несоответствия образцу

-match Regular expression comparison               Использование регулярных выражений для поиска соответствия образцу

-notmatch          Regular expression comparison               Использование регулярных выражений для поиска несоответствия образцу

-replace               Replace operator            Заменяет часть или все значение слева от оператора

-contains             Containment operator Определение, содержит ли значение слева от оператора значение справа. В отличие от предыдущих операторов, результатом является булево значение

-notcontains      Containment operator Определение того, что значение слева от оператора не содержит значение справа. Результатом является булево значение

Вывод, где размер больше или равен с поиском по маске:

Get-ChildItem "C:\Program Files\7-Zip\" | Where-Object -FilterScript {$_.Length -ge 150000 -and $_.Name -Like "7z.*"}

Вывод с общего занятого места объектами, с выводом максимального размера файла:

Get-ChildItem "C:\Program Files\7-Zip\" | Measure-Object -Property Length -Sum –Maximum

Вывод в форматированном виде, табуляция после Format-Table покажет варианты:

Get-ChildItem "C:\Program Files\7-Zip\" | Format-Table FullName, Extension, Length, Attributes

 

4.       Программирование

Посмотреть список стандартных переменных:

Get-Variable

Вывести значение переменной:

$PWD

Типы переменных:

[int] - целые числа

[single] - числа одинарной точности

[double] – числа двойной точности

[string] - текст

[char] - символ

[Boolean] – булево значение «Истина» \ «Ложь»

[datetime] - дата или время

Зададим значения переменных и произведем действие:

[int]$a = 10

[int]$b = 5

$a - $b

Конструкция if (elseif и else – необязательные блоки) – проверка условия:

[int]$a = 10

If ($a -eq 10){

    Write-Host "a = 10"

}

ELSEIF ($a -gt 10){

    Write-Host "a > 10"

    }

ELSE {

    Write-Host "a < 10"

}

Конструкция switch – проверяет значение:

[int]$a = 1

SWITCH ($a)

{

 0 {Write-Host "a = 0"}

 1 {Write-Host "a = 1"}

 2 {Write-Host "a = 2"}

 default {Write-Host "a - ?"}

}

Цикл while – выполняется, пока условие верно:

[int]$a = 1

WHILE ($a -lt 3){

    Write-Host $a

    $a = $a + 1

}

Аналогичная задача с while для цикла for:

FOR ([int]$a = 1; $a -lt 3; $a++){

    Write-Host $a

}

Перебор с помощью цикла foreach:

$Process = Get-Process

FOREACH ($proc In $Process){

    $proc.ProcessName + " - " + $proc.Id

}

 

Массивы, создание, обращение, перебор:

[int32[]]$Array = 1, 2, 3, 4

$Array[2]

FOR ([int]$i = 0; $i -lt $Array.count; $i++){

    $Array[$i]

}

Обработка исключений(ошибок), введите число или символ:

Try {

  [int]$num = Read-Host "Enter num"

  6 / $num

} catch {

  Write-Warning "Error"

}

Функции:

Простой пример и вызов:

Function Func{"func is work"}

Func

Пример с аргументами:

Function Func{"this is args: $Args"}

Func arg1 arg2

Еще пример с аргументами:

Function Func ($a, $b) {"this is args: $a $b"}

Func arg1 arg2

Пример с предопределенными значениями:

Function Func ($a="a1", $b="a2") {"this is args: $a $b"}

Func