Перейти к основному содержимому

Справочник по PowerShell

Разработчику Архитектору

Справочник по PowerShell

PowerShell — это объектно-ориентированная командная строка и язык сценариев, созданный для системного администрирования и автоматизации задач в средах Windows и кроссплатформенных окружениях. Инструмент базируется на .NET Framework (или .NET Core/.NET 5+), что обеспечивает доступ к полной функциональности платформы .NET через консольный интерфейс.

Справочник структурирован по ключевым компонентам: от базовых типов данных до продвинутых механизмов обработки ошибок и модулей. Каждый раздел содержит определения, таблицы значений и примеры кода.


Типы данных и переменные

Базовые типы данных

PowerShell использует систему типизации .NET. Переменные автоматически определяют свой тип при присваивании значения или требуют явного указания типа.

Тип данныхОписаниеПример значения
stringПоследовательность символов"Hello World", "C:\Path\To\File"
intЦелое число со знаком (32 бита)42, -100
longЦелое число со знаком (64 бита)9223372036854775807
doubleЧисло с плавающей точкой (двойная точность)3.14159
decimalТочное десятичное число (для финансов)19.99m
boolЛогическое значение$true, $false
charОдин символ'A', 'z'
datetimeДата и времяGet-Date
arrayУпорядоченная коллекция объектов@(1, 2, 3)
hashtableКоллекция пар ключ-значение@{Name="Timur"; Age=30}
objectБазовый класс для всех типовЛюбое значение без явного типа

Специальные переменные

В PowerShell существуют встроенные переменные, управляющие средой выполнения и контекстом.

Имя переменнойЗначение / Описание
$PSVersionTableСодержит информацию о версии PowerShell (Major, Minor, Build, Revision)
$PIDИдентификатор процесса текущего экземпляра PowerShell
$HostОбъект, представляющий хост-приложение (например, ISE, ConHost)
$argsМассив аргументов, переданных в скрипт или функцию
$env:Пространство имен для переменных среды системы
$profileПуть к файлу профиля текущего пользователя/сессии
$LASTEXITCODEКод возврата последней выполненной внешней команды
$?Булево значение, указывающее на успех последней операции
$inputПоток входных данных, поступающих в текущий блок кода
$stdout, $stderr, $stdinОбъекты потоков вывода, ошибки и ввода соответственно

Синтаксис объявления переменных

Переменные объявляются с использованием символа $.

# Объявление и присваивание
$myVariable = "Значение"
$count = 10

# Явное указание типа
[string]$name = "Пример"
[int]$number = 5

# Использование массива
$array = 1, 2, 3, 4, 5
$multiArray = @("A", "B", "C")

# Использование хэш-таблицы
$config = @{
Server = "localhost"
Port = 8080
Enabled = $true
}

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

Арифметические операторы

Операторы выполняют математические действия над числами.

ОператорДействиеПримерРезультат
+Сложение5 + 38
-Вычитание10 - 46
*Умножение6 * 742
/Деление20 / 45
%Остаток от деления17 % 52
**Возведение в степень2 ** 38
- (унарный)Изменение знака-5-5

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

Операторы возвращают логическое значение $true или $false.

ОператорЗначениеПример
-eqРавно5 -eq 5
-neНе равно5 -ne 3
-gtБольше чем10 -gt 5
-geБольше или равно5 -ge 5
-ltМеньше чем2 -lt 5
-leМеньше или равно5 -le 6
-likeСоответствует шаблону (регистронезависимо)"abc" -like "*b*"
-notlikeНе соответствует шаблону"abc" -notlike "*d*"
-matchРегулярное выражение"test" -match "^t.*t$"
-notmatchНе соответствует регулярному выражению"test" -notmatch "x"
-containsСодержит элемент в коллекции@(1,2,3) -contains 2
-notcontainsНе содержит элемент@(1,2,3) -notcontains 5
-isПроверка типа объекта5 -is [int]
-isnotНе является объектом указанного типа"text" -isnot [int]
-inЭлемент входит в набор3 -in @(1,2,3)
-notinЭлемент не входит в набор5 -notin @(1,2,3)

Логические операторы

Комбинируют условия и булевы значения.

ОператорЗначениеПример
-andЛогическое И$true -and $false
-orЛогическое ИЛИ$true -or $false
-xorИсключающее ИЛИ$true -xor $true
-notЛогическое НЕ-not $false
!Краткая форма NOT!(5 -gt 10)

Операторы строк

Обработка текстовых данных.

ОператорДействиеПример
+Конкатенация"Hello" + " " + "World"
-replaceЗамена по регулярному выражению"abc" -replace "b", "X"
-splitРазделение строки на массив"a,b,c" -split ","
-joinОбъединение массива в строку@("a","b") -join "-"
.LengthСвойство длины строки"Test".Length
.ToUpper()Преобразование в верхний регистр"test".ToUpper()
.ToLower()Преобразование в нижний регистр"TEST".ToLower()
.Trim()Удаление пробелов по краям" test ".Trim()

Операторы работы с коллекциями

ОператорДействиеПример
+=Добавление элемента к коллекции$arr += 10
-appendДобавление элемента в конец массива$arr -append 10
-prependДобавление элемента в начало массива$arr -prepend 10
..Генерация диапазона чисел1..5 (возвращает 1, 2, 3, 4, 5)
``Передача объекта следующему коммандлету

Коммандлеты и их параметры

Общие принципы работы

Каждый коммандлет PowerShell имеет набор параметров, определяющих его поведение. Параметры делятся на обязательные и необязательные.


Основные категории параметров

КатегорияОписаниеПримеры
-ParameterNameПараметр с именем, требующий значения-Path C:\Temp
-ValueПараметр для передачи значения напрямую-InputObject $obj
-ForceПринудительное выполнение операцииRemove-Item -Recurse -Force
-WhatIfПоказывает, что произойдет, но не выполняетRemove-Item -WhatIf
-ConfirmЗапрашивает подтверждение перед выполнениемStop-Service -Confirm
-VerboseВывод подробной информации о ходе выполненияInstall-Package -Verbose
-DebugВывод отладочной информацииGet-ChildItem -Debug
-ErrorActionУправление поведением при ошибкеGet-Content -ErrorAction SilentlyContinue
-ErrorVariableСохранение информации об ошибке в переменнуюGet-Item -ErrorVariable err
-WarningVariableСохранение предупреждений в переменнуюStart-Sleep -WarningVariable warn
-InformationVariableСохранение информационных сообщенийWrite-Information -InformationVariable info
-PipelineVariableПеременная для конвейера`Get-Process

Таблица популярных коммандлетов и их ключевых параметров

Файловая система (Get-ChildItem, Copy-Item, Remove-Item)

КоммандлетПараметрОписание
Get-ChildItem-PathПуть к папке или файлу
-FilterФильтр имени файла (используется провайдером)
-IncludeФильтр имени файла (применяется после получения)
-RecurseРекурсивный поиск в подпапках
-DepthГлубина рекурсии
-FileПоказывать только файлы
-DirectoryПоказывать только папки
-NameВыводить только имена объектов
-ForceПоказывать скрытые и системные объекты
Copy-Item-DestinationЦель копирования
-RecurseКопировать подпапки и файлы
-ForceПереписывать существующие файлы
-PassThruВозвращать копируемый объект в выходной поток
Remove-Item-PathПуть к удаляемому объекту
-RecurseУдалять подпапки и файлы
-ForceУдалять скрытые и системные объекты
-WhatIfПоказать эффект без удаления
-ConfirmЗапрос подтверждения

Процессор и служба (Get-Process, Start-Service, Stop-Process)

КоммандлетПараметрОписание
Get-Process-NameФильтрация по имени процесса
-IdФильтрация по идентификатору процесса (PID)
-ComputerNameУдаленный компьютер
-IncludeUserNameДобавить имя пользователя
-ErrorActionПоведение при ошибке доступа
Start-Service-NameИмя службы
-ComputerNameУдаленный компьютер
-WaitЖдать завершения запуска
-CredentialУчетные данные для запуска
Stop-Process-IdИдентификатор процесса
-NameИмя процесса
-ForceПринудительно завершить процесс
-PassThruВернуть остановленный процесс

Работа с сетью (Test-Connection, Invoke-RestMethod)

КоммандлетПараметрОписание
Test-Connection-ComputerNameХост для проверки
-CountКоличество запросов
-QuietВернуть только True/False
-BufferSizeРазмер пакета ICMP
Invoke-RestMethod-UriURL запроса
-MethodHTTP метод (GET, POST, PUT, DELETE)
-BodyТело запроса
-HeadersЗаголовки HTTP
-ContentTypeТип контента (application/json)
-UseBasicParsingОтключить HTML-парсер

Модули и пакеты (Import-Module, Install-Module)

КоммандлетПараметрОписание
Import-Module-NameИмя модуля
-PathПуть к модулю
-GlobalИмпорт в глобальную область видимости
-DisableNameCheckingИгнорировать проверку имени модуля
-ArgumentListАргументы для импорта
Install-Module-NameИмя модуля
-ScopeОбласть установки (CurrentUser, AllUsers)
-ForceПереустановка без вопросов
-AllowClobberПереопределение существующих команд
-RepositoryИсточник модулей (PSGallery)

Структуры управления потоком

Условные конструкции

Конструкция if

Выполняет блок кода, если условие истинно.

if ($value -gt 10) {
Write-Host "Значение больше 10"
} elseif ($value -eq 10) {
Write-Host "Значение равно 10"
} else {
Write-Host "Значение меньше 10"
}

Конструкция switch

Множественное ветвление по значению переменной.

switch ($status) {
"Active" {
Write-Host "Статус активен"
}
"Inactive" {
Write-Host "Статус неактивен"
}
Default {
Write-Host "Неизвестный статус"
}
}

Циклы

Цикл for

Итерация с фиксированным счетчиком.

for ($i = 0; $i -lt 5; $i++) {
Write-Host "Номер: $i"
}

Цикл foreach

Итерация по элементам коллекции.

$items = @("Apple", "Banana", "Cherry")
foreach ($item in $items) {
Write-Host "Фрукт: $item"
}

Цикл while

Цикл, выполняющийся, пока условие истинно.

$count = 0
while ($count -lt 5) {
Write-Host "Счетчик: $count"
$count++
}

Цикл do-while

Цикл, выполняющийся как минимум один раз.

do {
$input = Read-Host "Введите 'stop' для выхода"
Write-Host "Вы ввели: $input"
} while ($input -ne "stop")

Прерывание и продолжение циклов

ОператорОписание
breakНемедленное завершение цикла
continueПереход к следующей итерации цикла
returnВыход из функции или скрипта
foreach ($num in 1..10) {
if ($num -eq 5) { continue } # Пропускает 5
if ($num -eq 8) { break } # Останавливается на 8
Write-Host $num
}

Функции и скрипты

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

Функция — это именованный блок кода, который можно вызывать多次.

function Get-Greeting {
param(
[string]$Name,
[string]$Language = "en"
)

switch ($Language) {
"ru" { return "Привет, $Name!" }
"de" { return "Hallo, $Name!" }
default { return "Hello, $Name!" }
}
}

$result = Get-Greeting -Name "Timur" -Language "ru"
Write-Host $result

Параметры функций

Параметры могут иметь ограничения и значения по умолчанию.

Тип параметраОписание
[Parameter(Mandatory=$true)]Обязательный параметр
[Parameter(ValueFromPipeline=$true)]Принимает данные из конвейера
[Parameter(ValueFromPipelineByPropertyName=$true)]Принимает данные из конвейера по свойствам
[Parameter(Position=0)]Позиционный параметр
[ValidateSet("A", "B", "C")]Ограничение допустимых значений
[ValidateRange(1, 100)]Диапазон допустимых чисел
[Alias("n", "name")]Псевдонимы для параметра

Скрипты (.ps1)

Скрипт — это файл с расширением .ps1, содержащий последовательность команд.

# script.ps1
param(
[string]$OutputFile
)

Write-Host "Запуск скрипта..."
$Данные = Get-Content -Path "Данные.txt"
$Данные | Out-File -FilePath $OutputFile
Write-Host "Готово."

Область видимости переменных

УровеньОписание
LocalДоступна внутри функции или скрипта
ScriptДоступна во всем скрипте
GlobalДоступна глобально во всей сессии
PrivateДоступна только в текущем блоке кода
$global:MyVar = "Глобальная"

function Test-Var {
$script:MyVar = "Скриптовая"
$local:MyVar = "Локальная"
Write-Host "Глобальная: $global:MyVar"
Write-Host "Скриптовая: $script:MyVar"
Write-Host "Локальная: $local:MyVar"
}

Обработка ошибок и исключений

Типы ошибок

ТипОписание
Terminating ErrorОшибка, останавливающая выполнение потока
Non-Terminating ErrorОшибка, не останавливающая выполнение потока

Блок try-catch-finally

Использование для перехвата исключений.

try {
$file = Get-Content -Path "nonexistent.txt"
}
catch [Система.IO.FileNotFoundException] {
Write-Host "Файл не найден: $_"
}
catch {
Write-Host "Произошла ошибка: $($_.Exception.Message)"
}
finally {
Write-Host "Блок finally выполняется всегда"
}

Объект ошибки $_.Exception

Внутри блока catch переменная $_ содержит объект исключения.

СвойствоОписание
.MessageТекст сообщения об ошибке
.ExceptionСам объект исключения
.InvocationInfoИнформация о вызове команды
.LineСтрока кода, вызвавшая ошибку
.PositionMessageТочное положение ошибки

Параметр -ErrorAction

Управление реакцией на ошибки.

ЗначениеОписание
ContinueСтандартное поведение (вывод ошибки в stderr)
SilentlyContinueИгнорировать ошибку, ничего не выводить
StopВызвать terminating error
InquireЗапросить действие у пользователя
IgnoreИгнорировать ошибку (аналог Silent)
Get-Item -Path "missing" -ErrorAction SilentlyContinue

Объекты и конвейер (Pipeline)

Объекты в PowerShell

Все данные в PowerShell являются объектами .NET.

ХарактеристикаОписание
Тип объектаОпределяется классом .NET
СвойстваДанные внутри объекта
МетодыФункции объекта
MembersСовокупность свойств и методов

Конвейер

Передача объектов между командами.

Get-Process | Where-Object {$_.CPU -gt 100} | Select-Object Name, CPU, Id

Коммандлеты для работы с объектами

КоммандлетНазначение
Select-ObjectВыбор свойств и создание новых объектов
Where-ObjectФильтрация объектов по условию
Sort-ObjectСортировка объектов
Group-ObjectГруппировка объектов по свойству
Measure-ObjectПодсчет количества, суммы, среднего
Format-TableФорматирование вывода в таблицу
Format-ListФорматирование вывода в список
Out-FileЗапись результатов в файл
Export-CsvЭкспорт в CSV формат
ConvertTo-JsonКонвертация в JSON строку
ConvertFrom-JsonПарсинг JSON в объекты

Создание объектов вручную

$person = [PSCustomObject]@{
Name = "Timur"
Age = 31
Skills = @("C#", "Python", "SQL")
}

$person | Format-List

Работа с внешними ресурсами

Внешние команды (CMD, EXE)

PowerShell может запускать стандартные команды ОС.

# Запуск CMD
cmd /c dir

# Запуск EXE
notepad.exe file.txt

# Получение вывода
$output = cmd /c "echo Hello"

WMI и CIM

Интерфейсы для управления системой.

КоммандлетОписание
Get-WmiObjectПолучение данных WMI (устаревший, но рабочий)
Get-CimInstanceПолучение данных CIM (современный стандарт)
Invoke-CimMethodВызов метода WMI/CIM
Register-CimIndicationEventРегистрация событий
# Получение информации о BIOS
Get-CimInstance Win32_BIOS

# Получение списка служб
Get-CimInstance Win32_Service | Where-Object {$_.State -eq "Running"}

REST API и веб-запросы

# GET запрос
$response = Invoke-RestMethod -Uri "https://api.example.com/Данные" -Method Get

# POST запрос
$body = @{ key = "value" } | ConvertTo-Json
$headers = @{ "Authorization" = "Bearer token" }
$result = Invoke-RestMethod -Uri "https://api.example.com/Данные" -Method Post -Body $body -Headers $headers

XML и JSON

# Работа с XML
$xmlData = @"
<Root>
<Item id="1">Text</Item>
</Root>
"@
$xml = [xml]$xmlData
$item = $xml.Root.Item
Write-Host $item.Id

# Работа с JSON
$jsonString = '{"Name": "Test", "Value": 123}'
$jsonObj = $jsonString | ConvertFrom-Json
Write-Host $jsonObj.Name

Модули и профили

Структура модуля

Модуль — это пакет с функциями, переменными и скриптами.

ФайлРасширениеНазначение
Модуль.psm1Основной код модуля
Скрипт.ps1Вспомогательные скрипты
Документация.mdОписание модуля
Помощь.help.xmlВстроенная справка

Профили PowerShell

Файлы конфигурации, загружаемые при старте сессии.

ПутьОписание
$PROFILE.CurrentUserCurrentHostПрофиль текущего пользователя для текущего хоста
$PROFILE.CurrentUserAllHostsПрофиль текущего пользователя для всех хостов
$PROFILE.AllUsersCurrentHostПрофиль всех пользователей для текущего хоста
$PROFILE.AllUsersAllHostsПрофиль всех пользователей для всех хостов
# Создание профиля
if (!(Test-Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
}

# Редактирование профиля
notepad $PROFILE

Импорт модулей

# Импорт модуля по имени
Import-Module ActiveDirectory

# Импорт модуля из пути
Import-Module -Path "C:\Scripts\MyModule.psm1"

# Автоматический импорт при старте
$env:PSModulePath += ";C:\CustomModules"

Продвинутые темы

Job и Background Задачи

Выполнение операций в фоновом режиме.

КоммандлетОписание
Start-JobЗапуск фоновой задачи
Receive-JobПолучение результатов задачи
Remove-JobУдаление задачи
Wait-JobОжидание завершения задачи
Get-JobСписок активных задач
$job = Start-Job -ScriptBlock { Start-Sleep -Seconds 5; return "Done" }
Start-Sleep -Seconds 1
$job | Receive-Job

Привилегии и безопасность

КонцепцияОписание
RunAsAdministratorЗапуск консоли с правами администратора
ExecutionPolicyПолитика выполнения скриптов (Restricted, RemoteSigned, AllSigned, Unrestricted)
CodeSigningПодписание скриптов цифровыми сертификатами
SecurityContextКонтекст безопасности для выполнения кода
# Установка политики выполнения
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Интерактивные элементы

КоммандлетОписание
Read-HostВвод текста пользователем
Write-ProgressОтображение прогресс-бара
Write-HostВывод текста в консоль
Write-WarningВывод предупреждения (желтый цвет)
Write-ErrorВывод ошибки (красный текст)
Write-InformationВывод информационной информации
Write-Progress -Activity "Загрузка" -Status "Обработка данных" -PercentComplete 50
$answer = Read-Host "Введите пароль"

Полезные шаблоны и паттерны

Паттерн "Try-Catch-Finally" для файлов

function Process-File {
param([string]$Path)
try {
$content = Get-Content -Path $Path -ErrorAction Stop
# Обработка
}
catch {
Write-Error "Ошибка чтения файла: $Path"
}
finally {
# Очистка ресурсов
}
}

Паттерн "Pipeline Processing"

function Get-ProcessedItems {
param([string]$Source)
begin {
Write-Verbose "Начало обработки"
}
process {
# Обработка каждого элемента конвейера
$_ | ForEach-Object {
# Логика
}
}
end {
Write-Verbose "Завершение обработки"
}
}

Паттерн "Configuration Management"

$config = @{
Servers = @("Server1", "Server2")
Ports = 80, 443
Timeout = 30
}

foreach ($server in $config.Servers) {
foreach ($port in $config.Ports) {
Test-NetConnection -ComputerName $server -Port $port -TimeoutSec $config.Timeout
}
}

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).

Освоение главы0%