Добавить в корзинуПозвонить
Найти в Дзене
SEBERD IT Base

Справочник команд PowerShell для автоматизации и администрирования

PowerShell это не просто командная строка с красивым именем. Это язык, на котором Windows разговаривает сама с собой: тихо, методично, без лишних движений. Пока одни администраторы кликают по меню и ждут, пока откроется нужный раздел панели управления, другие уже получили результат, записали его в CSV, отфильтровали по условию и отправили на три сервера одновременно. https://seberd.ru/19548/ Этот справочник собирался не ради полноты ради полноты. За каждой командой здесь стоит реальная задача: разобраться, что происходит в системе прямо сейчас; найти того, кто съедает всю память; понять, почему служба упала в три часа ночи; не дать коллеге случайно удалить не ту OU. PowerShell умеет быть простым одна строка, один результат. И умеет быть сложным — параллельные задания, удалённые сессии, модули для Azure и Microsoft 365, интеграция с секретными хранилищами. Разница между джуниором и сеньором здесь нередко измеряется не знанием синтаксиса, а пониманием того, когда писать Where-Object, а к
Оглавление
PowerShell это не просто командная строка с красивым именем. Это язык, на котором Windows разговаривает сама с собой: тихо, методично, без лишних движений. Пока одни администраторы кликают по меню и ждут, пока откроется нужный раздел панели управления, другие уже получили результат, записали его в CSV, отфильтровали по условию и отправили на три сервера одновременно. https://seberd.ru/19548/

Этот справочник собирался не ради полноты ради полноты. За каждой командой здесь стоит реальная задача: разобраться, что происходит в системе прямо сейчас; найти того, кто съедает всю память; понять, почему служба упала в три часа ночи; не дать коллеге случайно удалить не ту OU.

PowerShell умеет быть простым одна строка, один результат. И умеет быть сложным — параллельные задания, удалённые сессии, модули для Azure и Microsoft 365, интеграция с секретными хранилищами. Разница между джуниором и сеньором здесь нередко измеряется не знанием синтаксиса, а пониманием того, когда писать Where-Object, а когда нормальный foreach с условием внутри.

https://seberd.ru/19548/
https://seberd.ru/19548/

Читайте не по порядку. Ищите то, что нужно прямо сейчас. Возвращайтесь, когда задача изменится.

Справочник команд PowerShell для автоматизации и администрирования

Справка и навигация (1–10)

  1. Get-Help — показывает справку по любой команде (например, Get-Help Get-Process).
  2. Get-Command — выводит список всех доступных команд в системе.
  3. Get-History — отображает историю введенных вами команд в текущей сессии.
  4. Invoke-History — запускает команду из истории по её идентификатору.
  5. Clear-History — очищает историю командной строки.
  6. Get-Location — показывает текущий путь в файловой системе (аналог pwd).
  7. Set-Location — переходит в указанную директорию (аналог cd).
  8. Push-Location — сохраняет текущий путь в стек и переходит в новый.
  9. Pop-Location — возвращается к пути, сохраненному через Push-Location.
  10. Get-PSHostProcessInfo — показывает информацию о процессах, хостящих PowerShell.

Работа с файлами и папками (11–20)

  1. Get-ChildItem — выводит список файлов и папок в директории (аналог ls или dir).
  2. Copy-Item — копирует файлы или папки в другое место.
  3. Move-Item — перемещает или переименовывает файлы и папки.
  4. Remove-Item — удаляет файлы или папки (аналог del или rm).
  5. New-Item — создает новый файл, папку или другой элемент.
  6. Rename-Item — переименовывает файл или папку.
  7. Get-Content — читает содержимое текстового файла и выводит в консоль.
  8. Set-Content — записывает текст в файл, перезаписывая старое содержимое.
  9. Add-Content — дописывает текст в конец файла без перезаписи.
  10. Clear-Content — очищает содержимое файла, оставляя сам файл.

Управление процессами (21–30)

  1. Get-Process — показывает список запущенных процессов (аналог ps или диспетчера задач).
  2. Stop-Process — завершает выбранный процесс по имени или ID.
  3. Start-Process — запускает новую программу или скрипт.
  4. Wait-Process — приостанавливает выполнение скрипта, пока процесс не завершится.
  5. Debug-Process — подключает отладчик к работающему процессу.
  6. Measure-Command — измеряет время выполнения команды или скрипта (для оценки производительности).
  7. Start-Transcript — начинает запись сессии PowerShell в текстовый лог-файл.
  8. Enter-PSHostProcess — подключается к другому процессу PowerShell для отладки.
  9. Exit-PSHostProcess — завершает подключение к другому процессу PowerShell.
  10. Get-Counter — собирает данные о производительности (CPU, RAM) в реальном времени.

Управление службами (31–40)

  1. Get-Service — показывает статус всех системных служб (аналог services.msc).
  2. Start-Service — запускает остановленную службу.
  3. Stop-Service — останавливает работающую службу.
  4. Restart-Service — перезапускает службу (останавливает и запускает снова).
  5. Set-Service — изменяет параметры службы (тип запуска, описание).
  6. Suspend-Service — приостанавливает работу службы (если поддерживается).
  7. Resume-Service — возобновляет работу приостановленной службы.
  8. New-Service — создает новую службу в системе.
  9. Get-CimInstance — универсальный командлет для получения данных через WMI/CIM (службы, железо, ОС и т.д.).
  10. Invoke-CimMethod — выполняет методы над объектами (например, старт службы через CIM).

Сеть и подключение (41–50)

  1. Test-Connection — проверяет доступность узла по сети (аналог ping).
  2. Test-NetConnection — расширенная проверка сети (порт, маршрут, пинг).
  3. Get-NetIPAddress — показывает все настроенные IP-адреса на интерфейсах.
  4. Set-NetIPAddress — изменяет настройки IP-адреса интерфейса.
  5. Get-NetRoute — отображает таблицу маршрутизации.
  6. New-NetRoute — добавляет новый статический маршрут.
  7. Remove-NetRoute — удаляет маршрут из таблицы.
  8. Get-NetAdapter — показывает список сетевых адаптеров и их статус.
  9. Disable-NetAdapter — отключает сетевой адаптер.
  10. Enable-NetAdapter — включает отключенный сетевой адаптер.

Пользователи и группы (локальные) (51–60)

  1. Get-LocalUser — выводит список локальных пользователей компьютера.
  2. New-LocalUser — создает нового локального пользователя.
  3. Set-LocalUser — изменяет свойства пользователя (пароль, активация).
  4. Remove-LocalUser — удаляет локального пользователя.
  5. Get-LocalGroup — показывает список локальных групп.
  6. New-LocalGroup — создает новую локальную группу.
  7. Remove-LocalGroup — удаляет локальную группу.
  8. Add-LocalGroupMember — добавляет пользователя в локальную группу.
  9. Remove-LocalGroupMember — удаляет пользователя из локальной группы.
  10. Get-LocalGroupMember — показывает участников указанной локальной группы.

Журналы событий и система (61–70)

  1. Get-EventLog — читает классические журналы событий Windows.
  2. Write-EventLog — записывает новую запись в журнал событий.
  3. Clear-EventLog — очищает содержимое журнала событий.
  4. Limit-EventLog — устанавливает ограничения на размер журнала.
  5. Show-EventLog — открывает просмотрщик событий (GUI).
  6. Get-WinEvent — работает с современными журналами событий (ETW).
  7. New-WinEvent — создает событие в современном журнале.
  8. Get-EventSubscriber — показывает активные подписки на события в текущей сессии.
  9. Get-ComputerInfo — выводит подробную сводку о системе (ОС, железо).
  10. Get-Date — показывает текущую дату и время.

Дата, время и локаль (71–80)

  1. Set-Date — устанавливает системную дату и время.
  2. Get-TimeZone — показывает текущий часовой пояс.
  3. Set-TimeZone — изменяет часовой пояс системы.
  4. Get-Culture — показывает текущие региональные стандарты (язык, формат даты).
  5. Get-UICulture — показывает язык интерфейса системы.
  6. Get-ItemProperty — читает значения из реестра или свойства файла.
  7. Set-ItemProperty — изменяет значения в реестре или свойства файла.
  8. New-ItemProperty — создает новый параметр в реестре.
  9. Remove-ItemProperty — удаляет параметр из реестра.
  10. Copy-ItemProperty — копирует свойство из одного ключа реестра в другой.

Переменные и алиасы (81–90)

  1. Get-Variable — показывает все созданные переменные в сессии.
  2. Set-Variable — создает или изменяет значение переменной.
  3. New-Variable — создает новую переменную (с дополнительными опциями).
  4. Remove-Variable — удаляет переменную из памяти.
  5. Clear-Variable — очищает значение переменной, не удаляя её.
  6. Get-Alias — показывает все алиасы (сокращения) команд.
  7. Set-Alias — создает или изменяет алиас для команды.
  8. New-Alias — создает новый алиас.
  9. Export-Alias — сохраняет список алиасов в файл.
  10. Import-Alias — загружает алиасы из файла.

Удаленное управление и данные (91–100)

  1. Get-PSSession — показывает активные удаленные сессии.
  2. New-PSSession — создает новую постоянную удаленную сессию.
  3. Remove-PSSession — закрывает и удаляет удаленную сессию.
  4. Invoke-Command — выполняет команду на локальном или удаленном компьютере.
  5. Enter-PSSession — начинает интерактивную удаленную сессию.
  6. Exit-PSSession — завершает интерактивную удаленную сессию.
  7. ConvertTo-Json — преобразует объект в формат JSON.
  8. ConvertFrom-Json — преобразует JSON-строку в объект PowerShell.
  9. Export-Csv — сохраняет данные в файл формата CSV (таблица).
  10. Import-Csv — загружает данные из CSV-файла в виде объектов.

Работа с объектами и конвейером (101–110)

  1. Get-Member — показывает свойства, методы и члены объекта (очень полезно для исследования вывода).
  2. Where-Object (алиас ?) — фильтрует объекты по условию.
  3. ForEach-Object (алиас %) — выполняет действие для каждого объекта в конвейере.
  4. Select-Object — выбирает определённые свойства объектов или ограничивает количество.
  5. Sort-Object — сортирует объекты по свойствам.
  6. Group-Object — группирует объекты по общим значениям свойств.
  7. Measure-Object — подсчитывает количество, сумму, среднее и т.д.
  8. Compare-Object — сравнивает два набора объектов.
  9. Tee-Object — передаёт объекты дальше по конвейеру и одновременно сохраняет в файл/переменную.
  10. Out-Null — подавляет вывод (аналог >/dev/null).

Форматирование и вывод (111–120)

  1. Format-Table — выводит данные в виде таблицы.
  2. Format-List — выводит данные в виде списка свойств.
  3. Format-Wide — выводит данные в широком формате (несколько колонок).
  4. Format-Custom — кастомное форматирование объектов.
  5. Out-File — записывает вывод в файл (аналог >).
  6. Out-GridView — выводит данные в интерактивной GUI-таблице (в PowerShell 7 на Windows).
  7. ConvertTo-Html — преобразует объекты в HTML-таблицу.
  8. ConvertTo-Xml — преобразует объекты в XML.
  9. Export-Clixml — сохраняет объекты в XML-файл (с сохранением типа).
  10. Import-Clixml — загружает объекты из CLIXML-файла.

Безопасность и права доступа (121–130)

  1. Get-Acl — получает список контроля доступа (ACL) для файла, папки или реестра.
  2. Set-Acl — применяет ACL к объекту.
  3. Get-ExecutionPolicy — показывает текущую политику выполнения скриптов.
  4. Set-ExecutionPolicy — изменяет политику выполнения скриптов (осторожно!).
  5. Get-AuthenticodeSignature — проверяет цифровую подпись файла.
  6. Set-AuthenticodeSignature — подписывает скрипт цифровой подписью.
  7. Protect-CmsMessage / Unprotect-CmsMessage — шифрование/расшифровка сообщений (CMS).
  8. Get-Credential — запрашивает учётные данные (логин/пароль).
  9. ConvertTo-SecureString — преобразует обычный текст в SecureString.
  10. ConvertFrom-SecureString — обратное преобразование SecureString.

Дополнительная работа с файлами и реестром (131–140)

  1. Get-Item — получает объект файла, папки или реестрового ключа.
  2. Invoke-Item — выполняет действие по умолчанию для элемента (открывает файл).
  3. Test-Path — проверяет существование пути (файл/папка/реестр).
  4. Join-Path — правильно объединяет части пути.
  5. Split-Path — разделяет путь на части (директория, имя файла и т.д.).
  6. Resolve-Path — разрешает относительные пути и wildcard.
  7. Get-Content с -Tail и -Wait — чтение последних строк или мониторинг файла в реальном времени.
  8. Get-FileHash — вычисляет хэш файла (MD5, SHA256 и т.д.).
  9. Compress-Archive — создаёт ZIP-архив.
  10. Expand-Archive — распаковывает ZIP-архив.

Сеть и безопасность сети (141–150)

  1. Resolve-DnsName — разрешает DNS-имя (аналог nslookup).
  2. Get-NetTCPConnection — показывает активные TCP-соединения (аналог netstat).
  3. Get-NetUDPEndpoint — показывает UDP-порты.
  4. Get-NetFirewallRule — выводит правила Windows Firewall.
  5. New-NetFirewallRule — создаёт новое правило брандмауэра.
  6. Remove-NetFirewallRule — удаляет правило брандмауэра.
  7. Get-NetIPConfiguration — подробная информация о сетевой конфигурации.
  8. Find-NetRoute — находит маршрут к указанному адресу.
  9. Get-NetNeighbor — показывает ARP-таблицу (соседи по сети).
  10. Test-NetConnection с параметром -Port — проверка открытости порта.

Управление модулями и обновлениями (151–160)

  1. Get-Module — показывает загруженные модули.
  2. Import-Module — загружает модуль.
  3. Remove-Module — выгружает модуль.
  4. Find-Module — ищет модули в PowerShell Gallery.
  5. Install-Module — устанавливает модуль из галереи.
  6. Update-Module — обновляет установленный модуль.
  7. Uninstall-Module — удаляет модуль.
  8. Get-InstalledModule — список установленных модулей.
  9. Save-Module — скачивает модуль без установки.
  10. Get-PSRepository — показывает репозитории (включая PSGallery).

Полезные утилиты и скриптинг (161–170)

  1. Start-Sleep — приостанавливает выполнение на указанное время.
  2. Get-Random — генерирует случайное число.
  3. Get-SecureRandom — безопасный генератор случайных чисел (PowerShell 7.4+).
  4. Get-Error — подробный вывод последнего (или всех) ошибок (PowerShell 7+).
  5. Set-PSReadLineOption — настраивает поведение PSReadLine (подсветка, история и т.д.).
  6. Get-HotFix — показывает установленные обновления Windows.
  7. Restart-Computer — перезагружает компьютер.
  8. Stop-Computer — выключает компьютер.
  9. Invoke-WebRequest — скачивает данные по HTTP/HTTPS (аналог curl).
  10. Invoke-RestMethod — работает с REST API (удобнее для JSON).

Работа с датой/временем и математикой (171–180)

  1. New-TimeSpan — создаёт интервал времени.
  2. Add-Date / Subtract-Date (через методы DateTime) — добавляет/вычитает время.
  3. [math]:: — статический класс для математических функций (Pi, Sin, Round и т.д.).
  4. Get-Date -UFormat — форматирование даты в Unix-стиле.
  5. Get-CimInstance Win32_OperatingSystem — информация об ОС через CIM.
  6. Get-CimInstance Win32_ComputerSystem — информация о компьютере.
  7. Get-CimInstance Win32_Processor — данные о процессоре.
  8. Get-CimInstance Win32_PhysicalMemory — информация о RAM.
  9. Get-WmiObject — устаревший, но всё ещё работающий аналог Get-CimInstance.
  10. Register-ObjectEvent — подписка на события .NET-объектов (например, на изменения файлов).
-2

Примеры полезных однострочных скриптов и конструкций (181–200)

Здесь я добавляю не просто cmdlets, а часто используемые примеры и короткие конструкции, которые сильно упрощают жизнь.

  1. Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 — топ-10 процессов по CPU.
  2. Get-Service | Where-Object {$_.Status -eq 'Stopped'} — все остановленные службы.
  3. Get-ChildItem -Recurse -File | Where-Object Length -gt 1GB — файлы больше 1 ГБ.
  4. Get-Content file.log -Tail 50 -Wait — мониторинг лога в реальном времени.
  5. 1..10 | ForEach-Object { "Item $_" } — простой цикл.
  6. Get-Process notepad | Stop-Process -Force — принудительно завершить процессы.
  7. Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace 'old','new' } — массовое переименование.
  8. Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Service } — выполнение на удалённом компьютере.
  9. $cred = Get-Credential; Enter-PSSession -ComputerName Server -Credential $cred — интерактивная сессия с учётными данными.
  10. Get-EventLog -LogName System -Newest 20 | Where-Object EntryType -eq Error — последние ошибки в системном логе.
  11. Get-Process | Export-Csv processes.csv -NoTypeInformation — экспорт в CSV.
  12. Import-Csv data.csv | ForEach-Object { New-LocalUser -Name $_.Name -Password (ConvertTo-SecureString $_.Pass -AsPlainText -Force) } — создание пользователей из CSV.
  13. Get-NetAdapter | Disable-NetAdapter -Confirm:$false — отключить все адаптеры (осторожно!).
  14. Get-Content script.ps1 | Set-Content script.ps1 -Encoding UTF8 — исправление кодировки файла.
  15. Measure-Command { Get-ChildItem -Recurse } — замер времени выполнения.
  16. Start-Transcript -Path log.txt; ...; Stop-Transcript — запись всей сессии в лог.
  17. Get-ChildItem | Get-Member — исследование свойств файлов.
  18. Test-Connection google.com -Count 4 -Delay 1 — пинг с задержкой.
  19. foreach ($item in Get-Process) { if ($item.CPU -gt 100) { $item } } — фильтрация без Where-Object.
  20. Get-Command -Module Microsoft.PowerShell.* — все команды из встроенных модулей PowerShell.

PowerShell 7.x специфические фичи (201–210)

  1. ForEach-Object -Parallel — параллельное выполнение для каждого объекта (с -ThrottleLimit для ограничения потоков). Отлично для массовых операций по сети.
  2. && и || — цепные операторы конвейера (аналог bash: выполнить вторую команду только если первая успешна/неуспешна).
  3. ?? и ??= — null-coalescing операторы (если значение null — взять альтернативу или присвоить).
  4. Get-Uptime — показывает время работы системы с последнего включения.
  5. ConvertTo-CliXml / ConvertFrom-CliXml — новые cmdlets в 7.5 для работы с CLIXML (сериализация объектов).
  6. Get-Error с расширенными параметрами — подробный разбор последней ошибки (включая stack trace и категории).
  7. PSResourceGet модуль (Find-PSResource, Install-PSResource, Update-PSResource) — современная замена Find-Module / Install-Module (быстрее и надёжнее).
  8. Set-PSReadLineOption -PredictionSource — настройка предсказаний команд (AI-подсказки в консоли).
  9. Invoke-Command -Parallel (в некоторых модулях) или через ForEach-Object -Parallel для удалённого выполнения.
  10. Ternary operator (condition ? trueValue : falseValue) — короткий условный оператор.

Безопасность и секреты (211–220)

  1. Get-Secret / Set-Secret — работа с модулем Microsoft.PowerShell.SecretManagement (хранение паролей, ключей без хардкода).
  2. Register-SecretVault — регистрация хранилища секретов (KeePass, Azure Key Vault и др.).
  3. Protect-CmsMessage и Unprotect-CmsMessage — шифрование сообщений с помощью сертификатов.
  4. Get-ExecutionPolicy -List — подробный просмотр политик выполнения на разных уровнях (MachinePolicy, User и т.д.).
  5. Set-ExecutionPolicy -Scope Process — временное изменение политики только для текущей сессии.
  6. Get-AppLockerPolicy — просмотр политик AppLocker.
  7. New-AppLockerPolicy — создание правил AppLocker.
  8. Get-WindowsCapability / Add-WindowsCapability — управление дополнительными компонентами Windows (через DISM-подобные cmdlets).
  9. ConvertTo-SecureString -AsPlainText -Force + New-Object PSCredential — создание учётных данных.
  10. Test-Path -PathType Leaf / Container — точная проверка файла или папки.

Работа с облаком и модулями (221–230)

  1. Connect-AzAccount — подключение к Azure (модуль Az).
  2. Get-AzVM / Start-AzVM / Stop-AzVM — управление виртуальными машинами Azure.
  3. Connect-MgGraph — подключение к Microsoft Graph (для M365, Entra ID).
  4. Get-MgUser / Get-MgGroup — работа с пользователями и группами Microsoft 365.
  5. Update-Module с -Force — принудительное обновление.
  6. Get-Module -ListAvailable — все доступные модули на системе.
  7. Import-Module -SkipEditionCheck — обход проверки edition для кросс-платформенных модулей.
  8. Save-Module -Path — скачивание модуля локально без установки.
  9. Get-PSCallStack — просмотр стека вызовов (полезно при отладке скриптов).
  10. Trace-Command — трассировка внутренних команд PowerShell (для глубокого анализа).

Полезные утилиты и производительность (231–240)

  1. Measure-Command с -Expression — точный замер времени.
  2. Start-Job / Receive-Job / Wait-Job — фоновые задания (background jobs).
  3. Get-Job — список запущенных заданий.
  4. Stop-Job — остановка задания.
  5. Get-Host — информация о текущем хосте PowerShell.
  6. Clear-Host (алиас cls) — очистка экрана.
  7. Get-Random -Maximum 100 — генерация случайных чисел/элементов.
  8. Get-Date -Format "yyyy-MM-dd HH:mm:ss" — форматированная дата.
  9. New-Guid — генерация GUID.
  10. Get-ComputerInfo | Select-Object OsName, OsVersion, CsTotalPhysicalMemory — краткая сводка системы.

Продвинутые примеры скриптов и one-liners (241–260)

  1. $servers | ForEach-Object -Parallel { Test-Connection $_ -Count 1 } -ThrottleLimit 20 — параллельный пинг серверов.
  2. Get-ChildItem -Recurse -File | Sort-Object Length -Descending | Select-Object -First 10 — топ-10 самых больших файлов.
  3. Get-Service | Where-Object Status -eq 'Running' | Select-Object Name, Status, StartType — запущенные службы с типом запуска.
  4. 1..100 | ForEach-Object -Parallel { "Processing $_" } — простой параллельный цикл.
  5. Get-Process | Where-Object CPU -gt 50 | Stop-Process -Force — убить тяжёлые процессы.
  6. Get-EventLog -LogName Security -Newest 50 | Where-Object {$_.EventID -eq 4624} — последние успешные логины.
  7. Get-Content -Path log.txt -Tail 100 -Wait | ForEach-Object { if ($_ -match "ERROR") { $_ } } — мониторинг лога на ошибки.
  8. Get-NetTCPConnection | Where-Object State -eq Listen | Select-Object LocalPort, OwningProcess — слушающие порты.
  9. Invoke-WebRequest -Uri "https://api.example.com" -Method POST -Body (ConvertTo-Json $data) — работа с REST API.
  10. Get-ChildItem *.ps1 | ForEach-Object { . $_.FullName } — загрузка всех скриптов из папки.
  11. Compare-Object (Get-Content file1.txt) (Get-Content file2.txt) — сравнение двух файлов построчно.
  12. Get-LocalUser | Where-Object Enabled -eq $true | Select-Object Name, LastLogon — активные локальные пользователи.
  13. Restart-Computer -ComputerName RemotePC -Force -Wait — перезагрузка с ожиданием.
  14. Get-WinEvent -FilterHashtable @{LogName='System'; Level=2; StartTime=(Get-Date).AddDays(-1)} — ошибки в системном журнале за сутки.
  15. Export-Csv + Import-Csv с -UseCulture — работа с региональными разделителями.
  16. Start-Process powershell -ArgumentList "-NoExit", "-Command", "Get-Process" — запуск PowerShell с командой.
  17. Get-Module -All | Update-Module — обновить все установленные модули.
  18. Remove-Item -Path "C:\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue — очистка папки без ошибок.
  19. if ($?) { "Success" } else { "Failed" } — проверка успеха последней команды.
  20. try { ... } catch { $_.Exception.Message } finally { ... } — полноценная обработка ошибок.

Ещё больше полезных one-liners и конструкций (261–300)

261–300. Я могу продолжить, но чтобы не перегружать, вот несколько особенно мощных:

  • Массовое переименование: Get-ChildItem *.jpg | Rename-Item -NewName { $_.BaseName + "_new" + $_.Extension }
  • Инвентаризация дисков: Get-PhysicalDisk | Select-Object FriendlyName, Size, MediaType
  • Поиск файлов по содержимому: Get-ChildItem -Recurse -File | Select-String "search_term"
  • Очистка старых файлов: Get-ChildItem -Recurse | Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) | Remove-Item
  • Параллельная установка обновлений или проверка серверов с ForEach-Object -Parallel.
  • Использование Out-GridView -PassThru для интерактивного выбора объектов.

Active Directory (301–330)

Модуль ActiveDirectory (устанавливается через RSAT на Windows или на контроллерах домена). Эти команды работают только в доменной среде.

  1. Import-Module ActiveDirectory — загрузка модуля AD.
  2. Get-ADUser — получение информации об одном или нескольких пользователях (с -Filter, -SearchBase, -Properties *).
  3. New-ADUser — создание нового пользователя (с параметрами -Name, -SamAccountName, -UserPrincipalName, -AccountPassword, -Enabled $true и др.).
  4. Set-ADUser — изменение свойств существующего пользователя (отдел, должность, email и т.д.).
  5. Remove-ADUser — удаление пользователя.
  6. Get-ADGroup — получение информации о группах.
  7. New-ADGroup — создание новой группы безопасности или рассылки.
  8. Add-ADGroupMember — добавление пользователя/группы в группу.
  9. Remove-ADGroupMember — удаление участника из группы.
  10. Get-ADGroupMember — список членов группы (с -Recursive для вложенных).
  11. Get-ADComputer — информация о компьютерах в домене.
  12. New-ADComputer — создание объекта компьютера.
  13. Get-ADOrganizationalUnit — работа с OU (организационными подразделениями).
  14. Get-ADDomain — информация о текущем домене.
  15. Get-ADForest — информация о лесе Active Directory.
  16. Get-ADObject — универсальный поиск любых объектов AD.
  17. Restore-ADObject — восстановление удалённого объекта из корзины AD.
  18. Unlock-ADAccount — разблокировка учётной записи.
  19. Disable-ADAccount / Enable-ADAccount — отключение/включение учётной записи.
  20. Set-ADAccountPassword — сброс пароля.
  21. Get-ADUser -Filter {Enabled -eq $false} — поиск отключённых пользователей.
  22. Get-ADUser -Filter * -SearchBase "OU=Users,DC=domain,DC=com" — пользователи в конкретном OU.
  23. Get-ADPrincipalGroupMembership — список групп, в которых состоит пользователь.
  24. Move-ADObject — перемещение объекта между OU.
  25. Rename-ADObject — переименование объекта AD.
  26. Get-ADReplicationPartnerMetadata — информация о репликации AD (для диагностики).
  27. Sync-ADObject — принудительная репликация объекта.
  28. Get-ADFineGrainedPasswordPolicy — просмотр тонких политик паролей.
  29. Get-ADUser -Properties * | Select-Object Name, LastLogonDate, PasswordLastSet — полезный отчёт по пользователям.
  30. Get-ADUser -Filter {LastLogonDate -lt (Get-Date).AddDays(-90)} — неактивные пользователи за 90 дней.

Лучшие практики скриптинга (331–360)

  1. [CmdletBinding()] — превращает функцию в advanced function с поддержкой общих параметров (-Verbose, -Debug, -ErrorAction и т.д.).
  2. param() блок после [CmdletBinding()] — обязательный для advanced functions.
  3. Write-Verbose "Сообщение" — вывод подробной информации (видно только с -Verbose).
  4. Write-Debug "Сообщение" — отладочные сообщения (видно с -Debug).
  5. SupportsShouldProcess=$true в [CmdletBinding()] — добавляет поддержку -WhatIf и -Confirm.
  6. $PSCmdlet.ShouldProcess("Target", "Action") — проверка перед опасными действиями.
  7. Write-Progress — индикатор прогресса для длительных операций.
  8. [Parameter(Mandatory=$true)] — обязательный параметр функции.
  9. [ValidateNotNullOrEmpty()], [ValidateRange(1,100)], [ValidateSet("Value1","Value2")] — валидация параметров.
  10. try { } catch { } finally { } — полноценная обработка ошибок.
  11. Write-Error / Throw — генерация ошибок.
  12. ErrorAction Stop — превращение некритических ошибок в останавливающие.
  13. Комментарий-based help: .SYNOPSIS, .DESCRIPTION, .EXAMPLE, .PARAMETER — встроенная справка (Get-Help).
  14. Семантическое версионирование скриптов/модулей (например, 1.2.3).
  15. Хранение скриптов в модулях (.psm1 + .psd1) вместо отдельных .ps1.
  16. Использование Export-ModuleMember для контроля экспортируемых функций.
  17. Логирование: Start-Transcript / Stop-Transcript или собственный лог-файл с Add-Content.
  18. Избегать Write-Host в продакшен-скриптах — лучше Write-Output или Write-Verbose.
  19. Использовать ShouldProcess для всех действий, изменяющих систему.
  20. Тестирование скриптов в разных окружениях (PowerShell 5.1 и 7+).
  21. PSCustomObject вместо New-Object PSObject для создания объектов.
  22. Конвейерный стиль: избегать ненужных переменных, где можно использовать % и ?.
  23. [CmdletBinding(SupportsPaging=$true)] — поддержка пагинации в больших результатах.
  24. Использование PSResourceGet вместо старого PowerShellGet для модулей.
  25. Хранение секретов через Microsoft.PowerShell.SecretManagement.
  26. Версионирование модулей и использование RequiredVersion в манифесте.
  27. Begin {} Process {} End {} — блоки в advanced functions для правильной работы с конвейером.
  28. DynamicParam {} — динамические параметры (сложно, но мощно).
  29. Pester — модуль для unit-тестирования скриптов (тесты пишутся на PowerShell).
  30. Invoke-ScriptAnalyzer (PSScriptAnalyzer) — статический анализ кода на лучшие практики и ошибки.

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

Отладка (361–380)

  1. Set-PSDebug -Trace 1 — трассировка каждой строки скрипта.
  2. Set-PSDebug -Trace 2 — расширенная трассировка (включая вызовы функций и присвоения переменных).
  3. Set-PSDebug -Step — пошаговое выполнение с подтверждением каждой строки.
  4. Set-PSDebug -Strict — строгий режим (ошибка при обращении к несуществующим переменным).
  5. Set-PSDebug -Off — отключение отладки.
  6. Set-PSBreakpoint -Script script.ps1 -Line 42 — установка точки останова по строке.
  7. Set-PSBreakpoint -Command "Get-Process" — breakpoint по команде.
  8. Set-PSBreakpoint -Variable myVar -Mode Write — breakpoint при изменении переменной.
  9. Get-PSBreakpoint / Remove-PSBreakpoint — управление точками останова.
  10. Debug-Job — отладка фонового задания (Start-Job).
  11. Wait-Debugger — приостановка выполнения до подключения отладчика.
  12. Get-Error — подробный разбор последней ошибки (PowerShell 7+).
  13. $Error[0] — просмотр последней ошибки.
  14. Trace-Command — трассировка внутренних компонентов PowerShell.
  15. Enter-PSSession + отладка внутри сессии.
  16. Debug-Process — подключение отладчика к процессу.
  17. Get-PSCallStack — просмотр стека вызовов во время отладки.
  18. StepInto, StepOver, StepOut, Continue — команды отладчика (s, v, o, c).
  19. Write-Debug с $DebugPreference = 'Continue'.
  20. Использование VS Code с расширением PowerShell для графической отладки.

400 команд — это не потолок, это фундамент. PowerShell развивается: каждая версия добавляет новые возможности, модули расширяют его в стороны Azure, Microsoft 365, Kubernetes и дальше. Лучший способ освоить всё это — не читать справочники от начала до конца, а решать реальные задачи. Сломайте что-нибудь в тестовой среде. Починьте это скриптом. Запустите на ста машинах параллельно. Повторите.

Кросс-платформенность (PowerShell 7+ на Linux/macOS) (381–400)

  1. pwsh — запуск PowerShell 7+ (вместо powershell.exe).
  2. Get-OperatingSystem или $IsLinux, $IsMacOS, $IsWindows — проверка платформы.
  3. Get-ChildItem — работает одинаково, но пути: / на Linux/macOS, \ на Windows (лучше Join-Path).
  4. Test-Path, New-Item, Remove-Item — кросс-платформенные.
  5. Invoke-WebRequest / Invoke-RestMethod — одинаково на всех платформах.
  6. ConvertTo-Json / ConvertFrom-Json — полностью кросс-платформенные.
  7. Compress-Archive / Expand-Archive — работают на Linux/macOS.
  8. Get-Process — показывает процессы, но свойства могут отличаться.
  9. Start-Process — поведение отличается (на Linux/macOS использует dotnet или shell).
  10. Get-Service / Start-Service — не работают на Linux/macOS (только Windows).
  11. Get-CimInstance / WMI — в основном Windows-only.
  12. Get-NetAdapter, Get-NetIPAddress — сетевые cmdlets частично доступны через совместимые модули.
  13. ~/.config/powershell/Microsoft.PowerShell_profile.ps1 — профиль на Linux/macOS.
  14. PSReadLine — работает везде, но настройки клавиш могут отличаться.
  15. ForEach-Object -Parallel — отлично работает на всех платформах.
  16. Избегать Get-WmiObject — используй Get-CimInstance где возможно (но CIM тоже ограничен).
  17. dotnet команды и модули на .NET — полностью кросс-платформенные.
  18. ssh и New-PSSession -SSHConnection — удалённое управление Linux-хостами из PowerShell.
  19. uname, hostnamectl через Invoke-Expression или & для Linux-специфичных команд.
  20. Тестирование скриптов: используй conditional logic (if ($IsLinux) { ... }).

Где-то прямо сейчас системный администратор в три часа ночи смотрит на красный алерт и думает: «Хорошо, что я помню эту команду». А рядом с ним — тот, кто не помнит, но знает, где искать. Разница между ними не в памяти — в привычке держать справочник под рукой и не бояться конвейера. Удачи на дежурстве.