Основные концепции PowerShell

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


1. Командлет: наименьшая единица команды

Что такое командлет?

Командлет (произноситсякомандлет) — это самая базовая единица команды в PowerShell. Командлеты — это классы на основе .NET, которые возвращают один или несколькообъектов .NET。

Соглашение об именовании: глагол-существительное

Каждый командлет следует соглашению об именованииглагол-существительное, например:

Командлет Значение
Get-Process Получить информацию о процессе
Set-Item Установить значение элемента ресурса
Remove-Item Удалить файлы, ключи реестра и т. д.
New-User Создать нового пользователя (если установлен модуль AD)

PowerShell поставляется с сотнями командлетов, а сторонние модули могут определять многие другие.

Пример

Get-Service
Get-ChildItem -Path C:\Windows

Вы также можете использоватьGet-Commandчтобы просмотреть все доступные командлеты:

Get-Command -CommandType Cmdlet

2. Конвейер объектов

В чём отличие от конвейеров UNIX/Linux?

В традиционных оболочках конвейер (|) передаёт текстовые строки. Однако в PowerShell,конвейер передаёт полные объекты .NET。

Это означает, что можно сохранять структурированные данные (свойства, методы) для дальнейшей обработки.

Пример: фильтрация процессов по использованию CPU

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

В приведённой выше команде:

  • Get-ProcessПолучить все процессы (возвращает объекты)
  • Where-ObjectФильтровать процессы с загрузкой ЦП выше 100
  • Select-ObjectВыводить толькоNameиCPUполе

Красота передачи объектов по конвейеру

Вам не нужно использовать такие инструменты, какawk、cut、grepчтобы "разбирать" вывод; вместо этого вы работаете напрямую со свойствами объектов.


3. Поставщики и PSDrive: абстракция дисков ресурсов

PowerShell предоставляет унифицированный способ доступа к ресурсам:модель поставщиков, которая сопоставляет различные ресурсы с виртуальными дисками (PSDrive), точно так же, какC:работа с диском.

Распространённые типы поставщиков

Provider Пример диска Описание
FileSystem C:, D: Локальная файловая система
Реестр HKLM:, HKCU: Реестр Windows
Окружение Env: Переменные среды
Сертификат Cert: Хранилище сертификатов
Функция Function: Функции в текущем сеансе
Переменная Variable: Определённые в данный момент переменные
Псевдоним Alias: Псевдонимы команд

Пример: работа с реестром

Get-ChildItem HKLM:\Software\Microsoft

Просматривайте реестр так же, как папки.


4. Скрипты и модули: организация и повторное использование

Скрипты (.ps1)

  • Скрипты PowerShell — это текстовые файлы с.ps1расширение
  • Они содержат последовательность команд, управление потоком, функции и т. д.

Модули (.psm1 / .psd1)

Модуль — это повторно используемая функциональная единица в PowerShell. Он может быть:

  • a.psm1файл (скрипт модуля)
  • папка, содержащая.psd1манифест (расширенный модуль)

Поддержка модулей:

  • Автозагрузка(автоматически загружается, когда используются его функции)
  • Версионирование
  • Объявления зависимостей

Просмотреть все модули в системе:

Get-Module -ListAvailable

Импортировать модуль:

Import-Module Az

5. Политика выполнения

Чтобы предотвратить выполнение вредоносных скриптов, PowerShell ввёлполитику выполнения(Execution Policy), которая ограничивает.ps1поведение выполнения файлов скриптов.

Общие типы политик

Политика Значение
Restricted По умолчанию; запуск скриптов запрещён
RemoteSigned Разрешает запуск локальных скриптов; удалённые скрипты должны быть подписаны
AllSigned Все скрипты должны быть подписаны
Bypass Unrestricted; не рекомендуется для продакшена

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

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

⚠️ Примечание: Политика выполнения влияет только на файлы скриптов; она не ограничивает команды, введённые вручную.


6. Удалённое управление (PowerShell Remoting)

PowerShell Remoting поддерживает удаленное подключение к другому компьютеру и выполнение команд черезWS-MAN (на основе WinRM)илиSSHпротокол.

Включение WinRM (в Windows)

Enable-PSRemoting -Force

Часто используемые команды

# 建立远程会话
Enter-PSSession -ComputerName Server01

# 批量执行命令
Invoke-Command -ComputerName Server01,Server02 -ScriptBlock { Get-Service }

Кроссплатформенное удаленное взаимодействие с поддержкой SSH

Enter-PSSession -HostName linux01 -User user1 -SSHTransport

7. Конфигурация требуемого состояния (DSC)

DSC (Конфигурация требуемого состояния) — этодекларативная платформа конфигурации PowerShell, используемая для определения "желаемого состояния" системы.

Это позволяет:

  • Определять состояния ресурсов с помощью сценариев конфигурации (например, служба должна быть запущена, файл должен существовать)
  • Автоматически приводить компьютер к этому состоянию
  • Обнаруживать отклонения и автоматически устранять их

Как использовать

  1. Написать файл конфигурации (.ps1)
  2. Скомпилировать его в MOF-файл
  3. Развернуть с использованием режима Push или Pull

DSC особенно полезен для крупномасштабной настройки серверов, проверок соответствия и автоматизированного развёртывания.


8. Обнаружение команд и справочная система

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

  • Get-Help Get-Process: Просмотр справки по команде
  • Get-Command: Список всех команд
  • Get-Member: Просмотр свойств и методов объекта
  • Get-Help about_*: Просмотр встроенных справочных документов (таких какabout_Execution_Policies)

Пример: Просмотр структуры объекта

Get-Process | Get-Member

Итог

Концепция Ключевое слово Краткое описание
Командлет verb-noun Наименьшая единица выполнения, основанная на .NET
Конвейер ` ` Передаёт объекты, а не текст
Provider FileSystem, Env: Унифицированный доступ к различным ресурсам
Модуль .psm1, .psd1 Организует коллекции многократно используемых команд
Политика выполнения Set-ExecutionPolicy Управляет разрешениями на выполнение сценариев
Удалённое управление Enter-PSSession Удалённое выполнение команд
DSC Configuration Декларативная платформа конфигурации системы
Система справки Get-Help Встроенная система документации
Другие расширения