При работе с PowerShell первое с чем мы сталкиваемся это команды (Cmdlet).
Вызов команды выглядит так:


Verb-Noun -Parameter1 ValueType1 -Parameter2 ValueType2[]

Help


Вызов справки в PowerShell осуществляется с помощью команды Get-Help. Можно указать один из параметров: example, detailed, full, online, showWindow.

Get-Help Get-Service -full вернет полное описание работы команды Get-Service
Get-Help Get-S* покажет все доступные команды и функции начинающиеся с Get-S*


Также на официальном сайте Microsoft есть подробная документация.


Вот пример справки по команде Get-Evenlog


image

Если параметры заключены в квадратные скобки [], то они являются необязательными.
То есть в этом примере само название журнала является обязательным, а название параметра нет. Если тип параметра и его название заключены в скобки вместе, то этот параметр необязательный.


Если посмотреть на параметр EntryType, то видно значения которые заключены в фигурные скобки. Для этого параметра мы можем использовать только предопределенные значения в фигурных скобках.


Информацию о том является ли параметр обязательным мы можем увидеть в описании ниже в поле Required. В примере выше атрибут After является необязательным, так как напротив Required стоит false. Далее мы видим поле Position напротив которого написано Named. Это обозначает что обратиться к параметру можно только по имени, то есть:


Get-EventLog -LogName Application -After 2020.04.26

Поскольку у параметра LogName вместо Named было указано число 0 это значит что мы можем обратиться к параметру без имени, а указав его в нужной последовательности:


Get-EventLog Application -After 2020.04.26

Допустим и такой порядок:


Get-EventLog -Newest 5 Application

Alias


Чтобы мы могли использовать привычные команды из консоли в PowerShell есть псевдонимы (Alias).


Пример псевдонима для команды Set-Location является cd.


То есть вместо вызова команды


Set-Location “D:\”

мы можем использовать


cd “D:\”

History


Чтобы посмотреть историю вызовов команд можно использовать Get-History


Выполнить команду из истории Invoke-History 1; Invoke-History 2


Очистить историю Clear-History


Pipeline


Пайплайн в powershell это когда результат выполнения первой функции передается во вторую. Вот пример использования пайплайна:


Get-Verb | Measure-Object

Но чтобы лучше понять пайплайн возьмем пример попроще. Есть команда


Get-Verb "get"

Если вызвать справку Get-Help Get-Verb -Full, то мы увидим что параметр Verb принимает pipline input и в скобках написано ByValue.


image

Это значит что мы можем переписать Get-Verb «get» на «get» | Get-Verb.
То есть результат первого выражения это строка и она передается в параметр Verb команды Get-Verb через pipline input по значению.
Также pipline input может быть ByPropertyName. В этом случае мы будем передавать объект у которого есть проперти со схожим названием Verb.


Variables


Переменные не являются строго типизированными и задаются с указанием символа $ впереди


$example = 4

Символ > означает поместить данные в
Например, $example > File.txt
Этим выражением мы поместим данные из переменной $example в файл
Аналогично команде Set-Content -Value $example -Path File.txt


Arrays


Инициализация массива:


$ArrayExample = @(“First”, “Second”)

Инициализация пустого массива:


$ArrayExample = @()

Получение значения по индексу:


$ArrayExample[0]

Получить весь массив:


$ArrayExample

Добавление элемента:


$ArrayExample += “Third”

$ArrayExample += @(“Fourth”, “Fifth”)

Сортировка:


$ArrayExample | Sort

$ArrayExample | Sort -Descending

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


$ArrayExample = $ArrayExample | Sort

По факту удаления из массива элемента в PowerShell нет, но можно это сделать вот таким образом:


$ArrayExample = $ArrayExample | where { $_ -ne “First” }

$ArrayExample = $ArrayExample | where { $_ -ne $ArrayExample[0] }

Удаление массива:


$ArrayExample = $null

Loops


Синтаксис циклов:


for($i = 0; $i -lt 5; $i++){}

$i = 0
while($i -lt 5){}

$i = 0
do{} while($i -lt 5)

$i = 0
do{} until($i -lt 5)

ForEach($item in $items){}

Выход из цикла break.


Пропуск элемента continue.


Conditional Statements


if () {} elseif () {} else

switch($someIntValue){
  1 { “Option 1” }
  2 { “Option 2” }
  default { “Not set” }
}

Function


Определение функции:


function Example () {
  echo &args
}

Запуск функции:


Example “First argument” “Second argument”

Определение аргументов в функции:


function Example () {
  param($first, $second)
}

function Example ($first, $second) {}

Запуск функции:


Example -first “First argument” -second “Second argument”

Exception


try{
} catch [System.Net.WebException],[System.IO.IOException]{
} catch {
} finally{
}