При работе с 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
Если параметры заключены в квадратные скобки [], то они являются необязательными.
То есть в этом примере само название журнала является обязательным, а название параметра нет. Если тип параметра и его название заключены в скобки вместе, то этот параметр необязательный.
Если посмотреть на параметр 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.
Это значит что мы можем переписать 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{
}