Ключевые слова и управляющие конструкции
Ключевые слова и управляющие конструкции
Базовые ключевые слова
$true и $false — встроенные переменные, представляющие логические значения истина и ложь. Эти значения используются в условных операторах и логических выражениях. Значение $true соответствует значению 1, а $false — значению 0. При сравнении числовых значений или строк система автоматически преобразует результат в один из этих двух типов.
if ($true) {
Write-Host "Это условие истинно"
}
if ($false) {
Write-Host "Этот код не выполнится"
}
$null — специальное значение, обозначающее отсутствие объекта или пустоту. В PowerShell отсутствие значения не равно нулю или пустой строке. Это отдельный тип данных, указывающий на то, что переменная не содержит никакого объекта. Проверка на $null является стандартным способом определения наличия или отсутствия данных в переменной.
$variable = $null
if ($variable -eq $null) {
Write-Host "Переменная пуста"
}
$args — встроенный массив, содержащий аргументы, переданные в функцию или скрипт при отсутствии явного объявления параметров. Этот массив доступен внутри любой функции и содержит все дополнительные параметры, которые не были сопоставлены с объявленными параметрами функции.
function Show-Args {
foreach ($arg in $args) {
Write-Output $arg
}
}
Show-Args "Первый" "Второй" "Третий"
$env: — префикс для доступа к переменным среды операционной системы. Через этот механизм можно читать и изменять системные переменные, такие как путь к исполняемым файлам, имя пользователя или текущая рабочая директория. Префикс $env: открывает доступ к провайдеру Env, который представляет собой набор переменных среды.
Write-Output $env:Path
Write-Output $env:UserName
$home — встроенная переменная, содержащая путь к домашней директории текущего пользователя. Значение этой переменной зависит от операционной системы и может быть C:\Users\ИмяПользователя в Windows или /home/имя_пользователя в Linux/MacOS. Эта переменная упрощает работу с путями к пользовательским файлам и папкам.
Write-Output $home
$PID — встроенная переменная, содержащая идентификатор процесса (Process ID) текущего экземпляра PowerShell. Значение изменяется при каждом запуске новой сессии оболочки. Идентификатор используется для управления процессами, мониторинга активности и отладки скриптов.
Write-Output "Текущий PID: $PID"
$PSHOME — встроенная переменная, указывающая на полный путь к директории установки PowerShell. Это системная переменная, которая всегда указывает на корневую папку, где размещены исполняемые файлы и модули оболочки.
Write-Output $PSHOME
$PWD — встроенная переменная, содержащая текущую рабочую директорию. Значение обновляется автоматически при переходе в другую папку с помощью команды Set-Location или cd. Переменная возвращает объект типа Система.IO.DirectoryInfo, содержащий информацию о пути.
Write-Output $PWD
$PSVersionTable — встроенная переменная, содержащая таблицу версий компонентов PowerShell. Объект включает информацию о версии самой оболочки, платформы CLR, поддерживаемых протоколов и других технических характеристиках.
$PSVersionTable.PSVersion
Ключевые слова для работы с переменными и типами данных
[type] — оператор приведения типов, используемый для явного преобразования значения одного типа в другой. Оператор заключается в квадратные скобки и precedes значение или переменную. Приведение типов может происходить автоматически, но явное указание типа повышает надежность скрипта и предотвращает ошибки при работе с данными.
[string]$text = 12345
[int]$number = "67890"
[bool]$isTrue = "true"
[hashtable] — оператор создания хеш-таблицы, представляющей коллекцию пар ключ-значение. Хеш-таблицы используются для хранения структурированных данных, где каждый элемент имеет уникальный ключ для быстрого доступа. Создание хеш-таблицы осуществляется через конструкцию @{}.
$person = @{
Name = "Ivan"
Age = 30
City = "Moscow"
}
[array] — оператор создания массива, представляющего упорядоченную коллекцию элементов одинакового или разного типа. Массивы создаются через запятую или через конструкцию @(). Элементы массива доступны по индексу, начиная с нуля.
$numbers = 1, 2, 3, 4, 5
$mixedArray = @("text", 123, $true)
[string] — оператор указания типа данных строка. Используется для явного объявления переменных, содержащих текстовые данные. Строки в PowerShell заключаются в кавычки (одинарные или двойные), причем двойные кавычки позволяют использовать подстановку переменных.
[string]$message = "Привет, мир!"
[string]$greeting = "Привет, $name"
[int], [long], [double], [decimal] — операторы указания числовых типов данных. Каждый тип предназначен для определенных диапазонов значений и точности вычислений. Тип int подходит для целых чисел, double — для чисел с плавающей точкой, decimal — для финансовых расчетов с высокой точностью.
[int]$count = 100
[double]$pi = 3.14159
[decimal]$price = 19.99
[datetime] — оператор указания типа данных дата и время. Позволяет работать с временными метками, проводить операции сложения и вычитания времени, форматировать вывод даты. Объекты DateTime содержат информацию о годе, месяце, дне, часе, минуте и секунде.
[datetime]$now = Get-Date
[datetime]$future = $now.AddDays(7)
[scriptblock] — оператор создания блока кода, который выполняется позже. Скрипт-блок инкапсулирует код и позволяет передавать его как аргумент в другие функции или выполнять в определенном контексте. Скрипт-блоки заключаются в фигурные скобки {}.
$scriptBlock = { Write-Output "Выполняется позже" }
& $scriptBlock
Ключевые слова для управления потоком выполнения
if, elseif, else — операторы условного ветвления, позволяющие выбирать различные пути выполнения кода в зависимости от результата проверки условия. Конструкция if проверяет первое условие, elseif добавляет дополнительные условия, а else выполняет блок кода, если ни одно из предыдущих условий не истинно.
$score = 85
if ($score -ge 90) {
Write-Output "Отлично"
} elseif ($score -ge 75) {
Write-Output "Хорошо"
} elseif ($score -ge 60) {
Write-Output "Удовлетворительно"
} else {
Write-Output "Неудовлетворительно"
}
switch — оператор выбора, выполняющий сравнение значения с множеством возможных вариантов. Конструкция switch поддерживает точное совпадение, регулярные выражения и проверку условий. Каждый случай (case) может содержать свой блок кода для выполнения.
$day = "Monday"
switch ($day) {
"Monday" { Write-Output "Начало недели" }
"Friday" { Write-Output "Конец рабочей недели" }
default { Write-Output "Обычный день" }
}
for — оператор цикла с фиксированным количеством итераций. Цикл for использует три компонента: инициализацию счетчика, условие продолжения и шаг изменения счетчика. Цикл выполняется до тех пор, пока условие остается истинным.
for ($i = 0; $i -lt 5; $i++) {
Write-Output "Итерация номер $i"
}
foreach — оператор цикла для перебора элементов коллекции. Цикл foreach автоматически проходит по каждому элементу массива, списка или другого объекта, поддерживающего итерацию. Внутри цикла переменная принимает значение текущего элемента.
$fruits = @("Apple", "Banana", "Orange")
foreach ($fruit in $fruits) {
Write-Output "Фрукт: $fruit"
}
while — оператор цикла с проверкой условия перед каждой итерацией. Цикл while продолжает выполнение, пока условие остается истинным. Если условие изначально ложно, тело цикла не выполнится ни разу.
$count = 0
while ($count -lt 5) {
Write-Output "Счетчик: $count"
$count++
}
do...while — оператор цикла с проверкой условия после выполнения тела цикла. Цикл do...while гарантирует выполнение тела хотя бы один раз, так как проверка условия происходит после первой итерации.
$count = 0
do {
Write-Output "Счетчик: $count"
$count++
} while ($count -lt 5)
break — оператор прерывания цикла или оператора switch. При выполнении команды break управление передается следующей инструкции после завершающего блока цикла или переключателя.
for ($i = 0; $i -lt 10; $i++) {
if ($i -eq 5) {
break
}
Write-Output "Значение: $i"
}
continue — оператор пропуска текущей итерации цикла и перехода к следующей. Команда continue прекращает выполнение оставшейся части тела цикла для текущей итерации и сразу переходит к проверке условия продолжения.
for ($i = 0; $i -lt 10; $i++) {
if ($i % 2 -eq 0) {
continue
}
Write-Output "Нечетное число: $i"
}
return — оператор выхода из функции или скрипта. Команда return немедленно завершает выполнение текущего блока кода и передает управление обратно вызывающему коду. Значение после return возвращается как результат выполнения функции.
function Get-Square {
param([int]$number)
return $number * $number
}
$result = Get-Square 5
Write-Output $result
Ключевые слова для работы с исключениями
try, catch, finally — конструкция обработки исключений, обеспечивающая надежное выполнение кода при возникновении ошибок. Блок try содержит код, который может вызвать ошибку. Блок catch перехватывает и обрабатывает возникшее исключение. Блок finally выполняется всегда, независимо от того, произошло ли исключение.
try {
$result = 10 / 0
} catch {
Write-Output "Произошла ошибка: $_"
} finally {
Write-Output "Блок finally выполнен"
}
throw — оператор генерации исключения. Команда throw создает объект исключения и передает управление блоку catch. Исключение может быть создано вручную для сигнализации об ошибке в логике скрипта.
function Check-Age {
param([int]$age)
if ($age -lt 18) {
throw "Возраст должен быть не менее 18 лет"
}
Write-Output "Доступ разрешен"
}
try {
Check-Age 15
} catch {
Write-Output "Ошибка: $_"
}
$ErrorActionPreference — системная переменная, определяющая поведение PowerShell при возникновении ошибок. Значение может быть Stop (остановить выполнение), Continue (продолжить выполнение), SilentlyContinue (игнорировать ошибку), Inquire (запросить действие пользователя).
$ErrorActionPreference = "Stop"
Get-Content "nonexistent.txt"
$LastExitCode — встроенная переменная, содержащая код выхода последней внешней команды. Код выхода равен 0, если команда завершилась успешно, и ненулевое значение в случае ошибки. Переменная доступна только после выполнения внешних программ.
netstat | Out-Null
Write-Output $LastExitCode
Ключевые слова для работы с модулями и функциями
function — оператор объявления функции. Функция инкапсулирует набор команд и позволяет вызывать их многократно с разными параметрами. Объявление функции начинается с ключевого слова function за которым следует имя функции.
function Add-Numbers {
param([int]$a, [int]$b)
return $a + $b
}
$result = Add-Numbers 5 10
Write-Output $result
param — оператор объявления параметров функции. Конструкция param определяет имена, типы и значения параметров по умолчанию, принимаемых функцией. Параметры могут быть обязательными или опциональными.
function Greet {
param(
[string]$Name,
[string]$Title = "Mr."
)
Write-Output "$Title $Name"
}
Greet -Name "Ivan"
Greet -Name "Maria" -Title "Ms."
filter — оператор создания фильтра для обработки потока данных. Фильтр работает в конвейере и применяет логику к каждому входящему объекту. Фильтры отличаются от функций тем, что предназначены для обработки потоков данных.
filter Format-Currency {
"{0:C}" -f $_
}
100, 200, 300 | Format-Currency
begin, process, end — блоки внутри функции или фильтра, определяющие этапы обработки данных. Блок begin выполняется один раз перед обработкой первого объекта. Блок process выполняется для каждого объекта в потоке. Блок end выполняется один раз после обработки всех объектов.
function Process-Данные {
begin {
Write-Output "Начало обработки"
}
process {
Write-Output "Обработка объекта: $_"
}
end {
Write-Output "Завершение обработки"
}
}
1, 2, 3 | Process-Данные
using module, import-module, export-module-member — операторы работы с модулями PowerShell. Модули представляют собой наборы функций, переменных и других элементов, упакованных в единый пакет. Операторы позволяют импортировать внешние модули, экспортировать компоненты и управлять зависимостями.
Import-Module Microsoft.PowerShell.Utility
Export-ModuleMember -Function Get-MyCommand
inmodule, incommand — операторы для выполнения кода в контексте конкретного модуля или команды. Эти операторы позволяют обращаться к внутренним элементам модулей, которые иначе недоступны из глобальной области видимости.
inmodule Microsoft.PowerShell.Безопасность {
Get-Help about_Security
}
Специальные ключевые слова
$PSCulture, $PSUICulture — переменные, содержащие информацию о региональных настройках текущей сессии PowerShell. Значения влияют на форматирование дат, чисел, валют и других локализованных данных.
Write-Output $PSCulture
Write-Output $PSUICulture
$ExecutionContext — объект, содержащий контекст выполнения текущего скрипта. Объект предоставляет доступ к информации о текущей сессии, системе безопасности и других параметрах выполнения.
Write-Output $ExecutionContext.SessionState.Path.CurrentLocation
$input — встроенный поток, содержащий входные данные, переданные в скрипт или функцию через конвейер. Поток input позволяет обрабатывать данные, поступающие извне, без явного объявления параметров.
$numbers = 1, 2, 3, 4, 5 | ForEach-Object { $_ * 2 }
$myinvocation — объект, содержащий информацию о текущем вызове скрипта или функции. Объект включает имя скрипта, номер строки, путь к файлу и другие детали вызова.
Write-Output $myinvocation.ScriptName
Write-Output $myinvocation.Line
$psitem — переменная, используемая в конвейере для обозначения текущего обрабатываемого объекта. Переменная заменяет символ $_ в некоторых случаях для повышения читаемости кода.
Get-ChildItem | ForEach-Object {
$psitem.FullName
}
$this — переменная, указывающая на текущий объект в методах классов. В PowerShell переменная $this используется внутри методов для обращения к свойствам и методам текущего экземпляра класса.
class Calculator {
[int] $Value
Calculator([int]$initialValue) {
$this.Value = $initialValue
}
[void] Add([int]$amount) {
$this.Value += $amount
}
}
Управляющие конструкции PowerShell
Условные операторы
Условные операторы позволяют принимать решения в зависимости от состояния данных. В PowerShell реализованы несколько видов условий, работающих с объектами и значениями.
Оператор if — основная конструкция для проверки условий. Синтаксис включает название условия в круглых скобках и блок кода в фигурных скобках. Условие должно возвращать логическое значение true или false.
$temperature = 25
if ($temperature -gt 20) {
Write-Output "Тепло"
}
if ($temperature -le 10) {
Write-Output "Холодно"
}
Оператор switch — альтернатива множественным условиям if-elseif. Switch сравнивает значение с несколькими вариантами и выполняет соответствующий блок кода. Поддерживает регулярные выражения и проверку условий.
$status = "active"
switch ($status) {
"active" { Write-Output "Статус активен" }
"inactive" { Write-Output "Статус неактивен" }
"pending" { Write-Output "Статус ожидает" }
default { Write-Output "Неизвестный статус" }
}
Оператор ternary (условный оператор) — компактная форма записи условия. В PowerShell нет отдельного синтаксиса ternary, но аналогичная функциональность реализуется через комбинацию if и else в одной строке.
$age = 20
$result = if ($age -ge 18) { "Совершеннолетний" } else { "Несовершеннолетний" }
Write-Output $result
Оператор -and, -or, -not — логические операторы для объединения условий. Оператор -and возвращает true, если оба условия истинны. Оператор -or возвращает true, если хотя бы одно условие истинно. Оператор -not инвертирует логическое значение.
$age = 25
$hasLicense = $true
if ($age -ge 18 -and $hasLicense) {
Write-Output "Доступ разрешен"
}
if ($age -lt 18 -or -not $hasLicense) {
Write-Output "Доступ запрещен"
}
Оператор -eq, -ne, -gt, -ge, -lt, -le — операторы сравнения. -eq проверяет равенство, -ne — неравенство, -gt — больше, -ge — больше или равно, -lt — меньше, -le — меньше или равно. Сравнение работает с объектами и учитывает их типы.
$a = 10
$b = 20
if ($a -lt $b) {
Write-Output "A меньше B"
}
if ($a -ne $b) {
Write-Output "A не равно B"
}
Оператор -like, -match, -contains — операторы поиска и проверки содержимого. -like проверяет соответствие шаблону с использованием символов подстановки. -match проверяет соответствие регулярному выражению. -contains проверяет наличие элемента в коллекции.
$name = "John Doe"
if ($name -like "*Doe*") {
Write-Output "Фамилия содержит Doe"
}
if ($name -match "^\w+\s+\w+$") {
Write-Output "Имя соответствует формату"
}
$colors = @("red", "green", "blue")
if ($colors -contains "green") {
Write-Output "Цвет зеленый найден"
}
Циклические конструкции
Циклы позволяют многократно выполнять одни и те же действия. В PowerShell реализованы различные виды циклов для разных сценариев.
Цикл for — цикл с фиксированным количеством итераций. Содержит три части: инициализацию, условие продолжения и изменение счетчика. Цикл выполняется до тех пор, пока условие истинно.
for ($i = 1; $i -le 10; $i++) {
Write-Output "Число: $i"
}
Цикл foreach — цикл для перебора элементов коллекции. Автоматически проходит по каждому элементу массива, списка или другого итерируемого объекта. Внутри цикла переменная принимает значение текущего элемента.
$items = @("apple", "banana", "cherry")
foreach ($item in $items) {
Write-Output "Фрукт: $item"
}
Цикл while — цикл с проверкой условия перед каждой итерацией. Продолжает выполнение, пока условие истинно. Если условие изначально ложно, тело цикла не выполнится.
$count = 0
while ($count -lt 5) {
Write-Output "Счетчик: $count"
$count++
}
Цикл do-while — цикл с проверкой условия после выполнения тела. Гарантирует выполнение хотя бы одной итерации, так как проверка происходит после первого прохода.
$count = 0
do {
Write-Output "Счетчик: $count"
$count++
} while ($count -lt 5)
Цикл foreach-object — специализированная форма цикла для работы с конвейером. Используется в сочетании с оператором ForEach-Object для обработки каждого объекта, проходящего через конвейер.
1..10 | ForEach-Object {
Write-Output "Объект: $_"
}
Цикл until — цикл с проверкой условия на ложность. Выполняется, пока условие ложно, и останавливается, когда условие становится истинным. Аналогичен do-while с инвертированным условием.
$answer = ""
until ($answer -eq "exit") {
$answer = Read-Host "Введите 'exit' для выхода"
Write-Output "Вы ввели: $answer"
}
Управление потоком выполнения
Команды управления потоком определяют, какие части кода будут выполнены и в каком порядке.
Break — принудительное завершение цикла или переключателя. При встрече с break выполнение текущего цикла прекращается, и управление передается следующей команде после цикла.
for ($i = 0; $i -lt 10; $i++) {
if ($i -eq 5) {
break
}
Write-Output "Значение: $i"
}
Continue — пропуск текущей итерации и переход к следующей. Остальная часть тела цикла не выполняется, и цикл сразу переходит к проверке условия продолжения.
for ($i = 0; $i -lt 10; $i++) {
if ($i % 2 -eq 0) {
continue
}
Write-Output "Нечетное число: $i"
}
Return — выход из функции или скрипта. Завершает выполнение текущего блока и возвращает управление вызывающему коду. Может возвращать значение как результат выполнения.
function Calculate-Sum {
param([int[]]$numbers)
if ($null -eq $numbers) {
return 0
}
return $numbers | Measure-Object -Sum | Select-Object -ExpandProperty Sum
}
$result = Calculate-Sum 1, 2, 3, 4, 5
Write-Output $result
Throw — генерация исключения. Создает объект исключения и передает управление блоку catch. Используется для сигнализации об ошибке в логике скрипта.
function Validate-Age {
param([int]$age)
if ($age -lt 0) {
throw "Возраст не может быть отрицательным"
}
if ($age -gt 150) {
throw "Возраст слишком большой"
}
Write-Output "Возраст валиден"
}
try {
Validate-Age -20
} catch {
Write-Output "Ошибка: $_"
}
Try-Catch-Finally — конструкция обработки ошибок. Блок try содержит код, который может вызвать ошибку. Блок catch перехватывает и обрабатывает исключение. Блок finally выполняется всегда.
try {
$file = Get-Content "Данные.txt"
Write-Output "Файл прочитан"
} catch {
Write-Output "Ошибка чтения файла: $_"
} finally {
Write-Output "Завершение обработки файла"
}
Работа с объектами и коллекциями
Конструкции для работы с объектами и коллекциями позволяют эффективно обрабатывать данные.
Select-Object — команда фильтрации и выборки свойств объектов. Позволяет выбрать конкретные свойства, применить преобразование или выполнить сортировку.
Get-Process | Select-Object Name, Id, CPU | Where-Object { $_.CPU -gt 10 }
Where-Object — команда фильтрации объектов по условию. Проверяет каждый объект и оставляет только те, которые соответствуют заданному условию.
$users = @(@{Name="Ivan"; Age=25}, @{Name="Maria"; Age=17})
$adults = $users | Where-Object { $_.Age -ge 18 }
Sort-Object — команда сортировки объектов по указанному свойству. Поддерживает сортировку по возрастанию и убыванию, а также сортировку по нескольким полям.
$files = Get-ChildItem | Sort-Object Length -Descending
Group-Object — команда группировки объектов по указанному свойству. Объединяет объекты с одинаковыми значениями свойства в группы.
$files = Get-ChildItem | Group-Object Extension
Measure-Object — команда подсчета и агрегации данных. Подсчитывает количество объектов, сумму, среднее значение и другие статистические показатели.
$numbers = 1, 2, 3, 4, 5
$sum = $numbers | Measure-Object -Sum
Write-Output $sum.Sum
ForEach-Object — команда применения операции к каждому объекту в потоке. Аналогична циклу foreach, но работает непосредственно с конвейером.
1..5 | ForEach-Object {
$_ * 2
}
Foreach — оператор цикла для перебора коллекций. Работает аналогично ForEach-Object, но может использоваться в любом месте кода, не только в конвейере.
$items = @("a", "b", "c")
foreach ($item in $items) {
Write-Output $item.ToUpper()
}
Специальные конструкции
Pipeline — механизм передачи объектов между командами. Результат выполнения одной команды передается на вход следующей. Объекты сохраняют свои свойства и методы при передаче.
Get-Process | Where-Object { $_.CPU -gt 10 } | Select-Object Name, CPU | Sort-Object CPU -Descending
Parameter Binding — механизм связывания параметров команд с аргументами. PowerShell автоматически сопоставляет аргументы с параметрами команды по имени или позиции.
Get-ChildItem -Path "C:\Temp" -Filter "*.txt" -Recurse
Variable Expansion — механизм подстановки значений переменных в строки. Двойные кавычки позволяют использовать переменные внутри строк, а фигурные скобки отделяют имя переменной от остального текста.
$name = "World"
$message = "Hello, $name!"
$complex = "Value is ${value}, not $valueextra"
Script Block Invocation — механизм выполнения блоков кода. Оператор & вызывает скрипт-блок или функцию, передавая ей аргументы.
$script = { Write-Output "Выполняется скрипт" }
& $script
Dot Sourcing — механизм загрузки функций и переменных из внешнего файла. Точка перед путем к файлу загружает содержимое файла в текущую область видимости.
. .\functions.ps1
Here Strings — механизм создания многострочных строк. Использует синтаксис @" ... "@ для создания строк с сохранением форматирования и поддержкой переменных.
$text = @"
Это многострочная строка.
Она сохраняет форматирование.
Переменная $name будет подставлена.
"@
Обработка ошибок и исключений
Система обработки ошибок
Error Action Preference — глобальная переменная, определяющая поведение PowerShell при возникновении ошибок. Значения включают Stop (остановить выполнение), Continue (продолжить выполнение), SilentlyContinue (игнорировать ошибку), Inquire (запросить действие пользователя).
$ErrorActionPreference = "Stop"
try {
Get-Content "nonexistent.txt"
} catch {
Write-Output "Ошибка: $_"
}
$Error — встроенный массив, содержащий последние возникшие ошибки. Каждый элемент массива представляет объект исключения с информацией об ошибке.
Get-Content "missing.txt" 2>$null
Write-Output $Error.Count
Write-Output $Error[0].Exception.Message
$ErrorMessage — переменная, содержащая сообщение об ошибке последнего исключения. Доступна в блоке catch для получения детальной информации.
try {
1 / 0
} catch {
Write-Output "Ошибка: $($_.Exception.Message)"
}
$PSBoundParameters — объект, содержащий параметры, явно переданные в функцию. Позволяет определить, какие параметры были указаны пользователем, а какие использовались значения по умолчанию.
function Test-Params {
param([string]$Param1, [string]$Param2)
Write-Output $PSBoundParameters.Keys
}
Test-Params -Param1 "Value1"
Продвинутая обработка ошибок
Throw with ErrorRecord — возможность создания пользовательских объектов ошибок с подробной информацией. Позволяет указать код ошибки, категорию и источник проблемы.
$errorRecord = New-Object Система.Management.Автоматизация.ErrorRecord(
"Ошибка подключения",
"ConnectionFailed",
[Система.Management.Автоматизация.ErrorCategory]::ConnectionError,
"Server1"
)
throw $errorRecord
Catch specific exception types — возможность перехватывать определенные типы исключений. Позволяет обрабатывать разные ошибки разными способами.
try {
Get-Item "C:\Temp\file.txt"
} catch [Система.IO.FileNotFoundException] {
Write-Output "Файл не найден"
} catch [Система.UnauthorizedAccessException] {
Write-Output "Нет прав доступа"
} catch {
Write-Output "Другая ошибка: $_"
}
Finally block usage — использование блока finally для очистки ресурсов. Блок выполняется всегда, независимо от того, произошло ли исключение.
$file = $null
try {
$file = New-Object Система.IO.FileStream "test.txt", ([IO.FileMode]::Create)
# Работа с файлом
} catch {
Write-Output "Ошибка: $_"
} finally {
if ($null -ne $file) {
$file.Close()
}
}
Throw inside functions — генерация исключений внутри функций для сигнализации об ошибках. Позволяет передать информацию об ошибке вызывающему коду.
function Divide {
param([int]$numerator, [int]$denominator)
if ($denominator -eq 0) {
throw "Деление на ноль невозможно"
}
return $numerator / $denominator
}
try {
$result = Divide 10 0
} catch {
Write-Output "Ошибка: $_"
}
Практические примеры использования
Пример 1: Обработка файлов с условиями
$directory = "C:\Temp"
$extension = ".txt"
if (Test-Path $directory) {
$files = Get-ChildItem -Path $directory -Filter "*$extension"
foreach ($file in $files) {
if ($file.Length -gt 1KB) {
Write-Output "Большой файл: $($file.Name)"
} elseif ($file.CreationTime -lt (Get-Date).AddDays(-30)) {
Write-Output "Старый файл: $($file.Name)"
}
}
} else {
Write-Output "Директория не найдена"
}
Пример 2: Цикл с обработкой ошибок
$servers = @("Server1", "Server2", "Server3")
foreach ($server in $servers) {
try {
$ping = Test-Connection -ComputerName $server -Count 1 -Quiet
if ($ping) {
Write-Output "Сервер $server доступен"
} else {
Write-Output "Сервер $server недоступен"
}
} catch {
Write-Output "Ошибка проверки сервера $server: $_"
}
}
Пример 3: Фильтрация и группировка данных
$processes = Get-Process | Where-Object { $_.CPU -gt 10 }
$grouped = $processes | Group-Object Name
foreach ($group in $grouped) {
Write-Output "Процесс $($group.Name): $($group.Count) экземпляров"
}
Пример 4: Работа с параметрами функции
function Configure-User {
param(
[string]$Username,
[ValidateSet("Admin", "User", "Guest")]
[string]$Role = "User",
[switch]$EnableRemoteAccess
)
Write-Output "Настройка пользователя: $Username"
Write-Output "Роль: $Role"
if ($EnableRemoteAccess.IsPresent) {
Write-Output "Удаленный доступ включен"
}
}
Configure-User -Username "Ivan" -Role "Admin" -EnableRemoteAccess
Пример 5: Обработка потоков данных
1..100 |
Where-Object { $_ % 2 -eq 0 } |
ForEach-Object { $_ * 2 } |
Sort-Object -Descending |
Select-Object -First 5
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Архитектура PowerShell построена вокруг концепции командлетов (cmdlet). Каждая команда представляет собой отдельный класс, реализующий определенный функционал. Командлеты следуют единообразному… Для дистрибутивов на основе Debian (Ubuntu, Debian, Kali) используется команда apt, для Red Hat Enterprise Linux и CentOS — yum или dnf. Процесс установки включает добавление репозитория Microsoft,… Набор советов, правил, принципов и обычаев в разработке на этом языке. PowerShell — это кроссплатформенная оболочка командной строки и язык сценариев, созданный компанией Microsoft для автоматизации администрирования операционных систем. Инструмент сочетает в себе… Как устроены команды и принципы построения скриптов в PowerShell Командлет — это функция, реализованная в виде класса .NET, который предоставляет единый интерфейс для выполнения конкретных задач в среде PowerShell. Термин представляет собой сокращение от… Типизация, набор правил определения типа данных значений языка. Основой условной логики служит проверка истинности выражения. Результатом такой проверки является булево значение True (истина) или False (ложь). Скрипт использует эти значения для выбора ветки… Функция в среде PowerShell представляет собой именованный блок кода, который выполняет конкретную задачу и может быть вызван многократно из разных частей скрипта или консоли. Создание функции… Для динамического добавления свойств используется cmdlet Add-Member. Это позволяет расширять функциональность объектов без изменения их исходного кода. PowerShell — это среда командной строки и язык сценариев, разработанный для автоматизации администрирования систем Windows. В отличие от классических языков программирования, где обработка ошибок… PowerShell обладает обширной библиотекой модулей, которые расширяют функциональность оболочки, предоставляя готовые инструменты для управления операционными системами, сетями, облачными сервисами и…История PowerShell
Экосистема автоматизации на PowerShell
Рекомендации по написанию PowerShell-скриптов
Основы языка PowerShell
Синтаксис и операторы PowerShell
Командлеты и встроенные функции PowerShell
Типы данных и работа с переменными
Условные выражения и циклы
Функции и продвинутые параметры
Объектная модель и конвейерная обработка
Обработка ошибок и стратегии отладки
Популярные модули и примеры скриптов