Windows и PowerShell

2.1 Что такое PowerShell

PowerShell — это современная командная оболочка и язык сценариев от Microsoft, предназначенная для автоматизации и управления системами Windows, а также других платформ.

История развития PowerShell

  • 2006 — PowerShell 1.0 для Windows XP/Server 2003
  • 2009 — PowerShell 2.0 с поддержкой удаленного выполнения
  • 2012 — PowerShell 3.0 с улучшенной производительностью
  • 2016 — PowerShell Core 6.0 (кроссплатформенная версия)
  • 2021 — PowerShell 7.x (современная версия)

Основные особенности PowerShell

Объектно-ориентированный подход: В отличие от традиционных командных оболочек, PowerShell работает с объектами .NET, а не только с текстом. Это делает его более мощным и гибким инструментом.

Преимущества PowerShell

По сравнению с командной строкой (CMD)

  • Работа с объектами вместо текста
  • Более мощные команды (cmdlets)
  • Встроенная система помощи
  • Поддержка .NET Framework
  • Конвейеры для передачи данных

Версии PowerShell

Windows PowerShell 5.1

  • Встроен в Windows 10/11
  • Работает только на Windows
  • Использует .NET Framework
  • Полная совместимость с Windows

PowerShell 7.x

  • Кроссплатформенная версия
  • Работает на Windows, Linux, macOS
  • Использует .NET Core/.NET 5+
  • Улучшенная производительность

Области применения

Системное администрирование: PowerShell широко используется для автоматизации задач администрирования Windows Server, управления Active Directory, настройки служб и мониторинга системы.
Разработка и DevOps: PowerShell также применяется в разработке для автоматизации сборки, тестирования и развертывания приложений, особенно в экосистеме Microsoft.

2.2 Установка и настройка PowerShell

PowerShell доступен в нескольких вариантах установки в зависимости от ваших потребностей и версии Windows.

Проверка текущей версии

# Проверка версии PowerShell
                        $PSVersionTable
                        
                        # Или более кратко:
                        $PSVersionTable.PSVersion
                    

Windows PowerShell 5.1 (встроенный)

Автоматическая установка: Windows PowerShell 5.1 встроен в Windows 10 и Windows 11. Для его использования достаточно открыть PowerShell из меню "Пуск" или нажать Win + X и выбрать "Windows PowerShell".

Установка PowerShell 7.x

Способ 1: Microsoft Store

  1. Откройте Microsoft Store
  2. Найдите "PowerShell"
  3. Установите официальное приложение

Способ 2: Скачивание с GitHub

  1. Перейдите на GitHub releases
  2. Скачайте MSI пакет для Windows
  3. Запустите установщик от имени администратора

Способ 3: Через winget (Windows 10/11)


                            # Установка через winget
                            winget install Microsoft.PowerShell
                        

Настройка профиля PowerShell

# Проверка существования профиля
                        Test-Path $PROFILE
                        
                        # Создание профиля, если его нет
                        if (!(Test-Path $PROFILE)) {
    New-Item -ItemType File -Path $PROFILE -Force
                        }
                        
                        # Открытие профиля для редактирования
                        notepad $PROFILE
                    

Полезные настройки профиля

# Пример настроек профиля PowerShell
# Установка алиасов
Set-Alias ll Get-ChildItem
Set-Alias grep Select-String

# Настройка цветов
$Host.UI.RawUI.ForegroundColor = "White"
$Host.UI.RawUI.BackgroundColor = "Black"

# Функция для быстрого перехода в папку
function Set-LocationHome { Set-Location $env:USERPROFILE }
Set-Alias home Set-LocationHome

# Приветственное сообщение
Write-Host "PowerShell загружен успешно!" -ForegroundColor Green

Настройка политики выполнения

Безопасность скриптов: По умолчанию PowerShell блокирует выполнение скриптов из соображений безопасности. Для работы со скриптами необходимо настроить политику выполнения.
# Проверка текущей политики
Get-ExecutionPolicy
                        
                        # Установка политики для текущего пользователя
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
                        
                        # Проверка всех политик
Get-ExecutionPolicy -List
                    

Установка модулей

Модули PowerShell: Модули расширяют функциональность PowerShell. Многие модули устанавливаются автоматически, но некоторые нужно устанавливать вручную.
# Просмотр установленных модулей
Get-Module -ListAvailable
                        
                        # Установка модуля из PowerShell Gallery
                        Install-Module -Name ModuleName -Force
                        
                        # Обновление модуля
                        Update-Module -Name ModuleName
                    

2.3 Первые команды PowerShell

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

Навигация по файловой системе

# Показать текущее местоположение
Get-Location
                        # или сокращенно:
                        pwd
                        
                        # Перейти в папку
Set-Location C:\Users
                        # или сокращенно:
                        cd C:\Users
                        
                        # Перейти в домашнюю папку
Set-Location $env:USERPROFILE
                        # или:
                        cd ~
                    

Работа с файлами и папками

# Показать содержимое папки
Get-ChildItem
                        # или сокращенно:
                        ls
                        # или:
                        dir
                        
                        # Показать только папки
Get-ChildItem -Directory
                        
                        # Показать только файлы
Get-ChildItem -File
                        
                        # Показать скрытые файлы
Get-ChildItem -Force
                    

Создание файлов и папок

# Создать папку
New-Item -ItemType Directory -Name "НоваяПапка"
                        # или сокращенно:
                        mkdir "НоваяПапка"
                        
                        # Создать файл
New-Item -ItemType File -Name "новый_файл.txt"
                        
                        # Создать файл с содержимым
                        "Привет, мир!" | Out-File -FilePath "привет.txt" -Encoding UTF8
                    

Копирование и перемещение

# Копировать файл
                        Copy-Item "исходный_файл.txt" "копия_файла.txt"
                        # или сокращенно:
                        copy "исходный_файл.txt" "копия_файла.txt"
                        
                        # Переместить файл
                        Move-Item "файл.txt" "папка\файл.txt"
                        # или сокращенно:
                        move "файл.txt" "папка\файл.txt"
                        
                        # Переименовать файл
                        Rename-Item "старое_имя.txt" "новое_имя.txt"
                    

Удаление файлов и папок

# Удалить файл
Remove-Item "файл.txt"
                        # или сокращенно:
                        del "файл.txt"
                        
                        # Удалить папку с содержимым
Remove-Item "папка" -Recurse -Force
                        
                        # Удалить все файлы с определенным расширением
Remove-Item "*.tmp" -Force
                    

Получение информации о системе

# Информация о компьютере
Get-ComputerInfo
                        
                        # Информация о процессоре
Get-WmiObject -Class Win32_Processor
                        
                        # Информация о памяти
Get-WmiObject -Class Win32_PhysicalMemory
                        
                        # Список запущенных процессов
Get-Process
                        # или сокращенно:
                        ps
                    

Работа с переменными

# Создать переменную
                        $имя = "Иван"
                        $возраст = 25
                        
                        # Показать значение переменной
Write-Host "Имя: $имя, Возраст: $возраст"
                        
                        # Переменные окружения
                        $env:USERNAME
                        $env:COMPUTERNAME
                        $env:PATH
                    

Конвейеры (Pipelines)

Конвейеры PowerShell: Одна из самых мощных возможностей PowerShell — это передача результатов одной команды в другую через символ | (вертикальная черта).
# Найти все .txt файлы и показать их размер
Get-ChildItem -Filter "*.txt" | Select-Object Name, Length
                        
                        # Найти процессы, использующие больше 100MB памяти
Get-Process | Where-Object {$_.WorkingSet -gt 100MB} | Sort-Object WorkingSet -Descending
                        
                        # Получить список служб, которые запущены
Get-Service | Where-Object {$_.Status -eq "Running"} | Select-Object Name, Status
                    

Форматирование вывода

# Табличный формат
Get-Process | Format-Table Name, CPU, WorkingSet
                        
                        # Список
Get-Service | Format-List Name, Status, StartType
                        
                        # Широкий формат
Get-ChildItem | Format-Wide Name -Column 3
                    
Совет: Используйте команду Get-Help для получения справки по любой команде PowerShell. Например: Get-Help Get-Process -Examples покажет примеры использования команды Get-Process.

2.4 Система помощи PowerShell

PowerShell имеет мощную встроенную систему помощи, которая является одним из главных преимуществ этой оболочки.

Основные команды помощи

# Общая справка по команде
Get-Help Get-Process
                        # или сокращенно:
                        help Get-Process
                        
                        # Подробная справка
Get-Help Get-Process -Detailed
                        
                        # Полная справка с примерами
Get-Help Get-Process -Full
                        
                        # Только примеры
Get-Help Get-Process -Examples
                    

Поиск команд

# Найти все команды, содержащие "process"
Get-Command *process*
                        
                        # Найти команды для работы с файлами
Get-Command *item*
                        
                        # Найти команды, начинающиеся с "Get-"
Get-Command Get-*
                        
                        # Найти команды по глаголу
Get-Command -Verb Get
Get-Command -Verb Set
Get-Command -Verb New
                    

Обновление справки

Важно: Справка PowerShell может быть устаревшей или отсутствовать. Рекомендуется обновить справку при первом использовании PowerShell.
# Обновить справку (требует прав администратора)
                        Update-Help
                        
                        # Обновить справку для конкретного модуля
                        Update-Help -Module Microsoft.PowerShell.Management
                        
                        # Проверить, доступна ли справка
Get-Help Get-Process -ErrorAction SilentlyContinue
                    

Справка по модулям

# Показать все модули
Get-Module -ListAvailable
                        
                        # Справка по модулю
Get-Help about_Modules
                        
                        # Импортировать модуль
                        Import-Module ModuleName
                        
                        # Справка по импортированному модулю
Get-Command -Module ModuleName
                    

Концептуальная справка

О концептуальной справке: PowerShell содержит подробные объяснения концепций и принципов работы. Эти статьи начинаются с "about_".
# Список всех концептуальных статей
Get-Help about_*
                        
                        # Справка по переменным
Get-Help about_Variables
                        
                        # Справка по операторам
Get-Help about_Operators
                        
                        # Справка по конвейерам
Get-Help about_Pipelines
                        
                        # Справка по функциям
Get-Help about_Functions
                    

Интерактивная справка

# Открыть справку в браузере
Get-Help Get-Process -Online
                        
                        # Показать справку в отдельном окне
Get-Help Get-Process -ShowWindow
                    

Справка по параметрам

# Показать только параметры команды
Get-Help Get-Process -Parameter *
                        
                        # Справка по конкретному параметру
Get-Help Get-Process -Parameter Name
                    

Полезные алиасы для справки

# Создание полезных алиасов для справки
Set-Alias ? Get-Help
Set-Alias h Get-Help

# Функция для быстрого поиска
function Find-Command {
    param([string]$Pattern)
    Get-Command *$Pattern* | Select-Object Name, CommandType
}

# Алиас для функции
Set-Alias fc Find-Command

Справка по синтаксису

# Синтаксис команды
Get-Command Get-Process -Syntax
                        
                        # Справка по операторам сравнения
Get-Help about_Comparison_Operators
                        
                        # Справка по регулярным выражениям
Get-Help about_Regular_Expressions
                    
Совет: Если вы не знаете точное название команды, используйте Get-Command с подстановочными знаками (*) для поиска. Например: Get-Command *file* найдет все команды, содержащие слово "file".

Внешние ресурсы

Дополнительные ресурсы: