⚡ Wiki-справочник · Windows PowerShell · Скрипты · Администрирование
PowerShell для системного администратора
Практический одностраничный сайт-справочник с командами, готовыми скриптами, пояснениями,
типовыми сценариями для Windows, Windows Server, Active Directory, сети, служб, логов и автоматизации.
PowerShell — это командная оболочка и язык автоматизации для Windows-администрирования.
Главное отличие от классического CMD: PowerShell работает не только с текстом, а с объектами.
Это позволяет фильтровать, сортировать, группировать и экспортировать данные намного удобнее.
Windows PowerShell 5.1
Встроен в Windows 10/11 и Windows Server. Часто используется для локального администрирования, GPO, AD, старых модулей.
PowerShell 7+
Современная кроссплатформенная версия. Подходит для новых скриптов, автоматизации, CI/CD, работы с REST API.
Windows Terminal
Удобная современная оболочка для вкладок PowerShell, CMD, WSL и SSH. Рекомендуется для повседневной работы.
Первые команды
Команда
Что делает
Пример
Get-Command
Ищет доступные команды и cmdlet'ы.
Get-Command *service*
Get-Help
Показывает справку по команде.
Get-Help Get-Process -Examples
Get-Member
Показывает свойства и методы объекта.
Get-Process | Get-Member
Where-Object
Фильтрует объекты по условию.
Get-Service | ? Status -eq Running
Select-Object
Выбирает нужные поля.
Get-Process | Select Name, CPU
Sort-Object
Сортирует результат.
Get-Process | Sort CPU -Descending
В PowerShell многие команды имеют псевдонимы: ls, dir, cd, cat, type.
Но в скриптах лучше использовать полные имена: Get-ChildItem, Set-Location, Get-Content.
Синтаксис и конвейер
Конвейер | передаёт результат одной команды в другую. В CMD чаще передаётся текст,
а в PowerShell — полноценные объекты с полями и методами.
Базовые конструкции
Переменные, условия, циклы
# Переменная
$ServerName = $env:COMPUTERNAME
# Условие
if ((Get-Service -Name Spooler).Status -eq 'Running') {
Write-Host "Служба печати запущена"
} else {
Write-Host "Служба печати остановлена"
}
# Цикл foreach
$Services = 'Spooler', 'W32Time', 'WinRM'
foreach ($Service in $Services) {
Get-Service -Name $Service
}
# Конвейер
Get-Process |
Where-Object CPU -gt 10 |
Sort-Object CPU -Descending |
Select-Object -First 10 Name, Id, CPU
Хороший администратор не запоминает все команды наизусть. Он быстро находит нужный cmdlet,
читает примеры, смотрит параметры и понимает, какие объекты возвращает команда.
Задача
Команда
Описание
Найти команду
Get-Command *user*
Покажет команды, где в имени есть user.
Примеры использования
Get-Help Get-Service -Examples
Покажет примеры по команде.
Полная справка
Get-Help Get-Process -Full
Покажет описание, параметры, примеры.
Справка в браузере
Get-Help Get-ChildItem -Online
Откроет онлайн-документацию.
Свойства объекта
Get-Service | Get-Member
Покажет поля и методы объектов службы.
Список модулей
Get-Module -ListAvailable
Покажет установленные модули.
Обновление локальной справки
# Запускать PowerShell от имени администратора
Update-Help -Force -ErrorAction SilentlyContinue
# Если справка не обновляется на сервере без интернета,
# можно использовать Save-Help на машине с интернетом и Update-Help -SourcePath.
Политика выполнения и безопасность
Политика выполнения не является полноценной системой безопасности, но помогает защититься
от случайного запуска неподписанных или загруженных из интернета скриптов.
# Посмотреть политики по уровням
Get-ExecutionPolicy -List
# Разрешить локальные скрипты для текущего пользователя
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Разовый запуск скрипта без изменения постоянной политики
powershell.exe -ExecutionPolicy Bypass -File .\script.ps1
Не запускайте чужие скрипты из интернета без просмотра кода. Особенно опасны команды с
Invoke-Expression, скачиванием через Invoke-WebRequest, скрытым запуском PowerShell,
изменением реестра, задач планировщика и автозагрузки.
PowerShell удобен для массовой работы с файлами: поиск старых логов, очистка временных папок,
копирование, сравнение, проверка хэшей и настройка прав доступа.
Для ежедневного администрирования часто нужно найти зависший процесс, проверить службу,
перезапустить сервис, изменить тип запуска или собрать статистику потребления ресурсов.
PowerShell заменяет множество отдельных утилит: ping, nslookup, ipconfig, route, netstat.
Для быстрой диагностики особенно полезны Test-NetConnection, Resolve-DnsName,
Get-NetIPConfiguration и Get-NetTCPConnection.
Журналы Windows — один из главных источников диагностики. Через PowerShell можно быстро находить
ошибки, неудачные входы, перезагрузки, падения служб и проблемы приложений.
Реестр в PowerShell доступен как файловая система: HKLM: и HKCU:.
Это удобно для проверки автозагрузки, политик, настроек приложений и системных параметров.
Перед массовым изменением реестра делайте экспорт ветки и используйте -WhatIf, если команда его поддерживает.
Ошибка в реестре может привести к неработоспособности приложения или Windows.
На рабочих станциях и серверах без домена PowerShell позволяет управлять локальными пользователями,
группами, членством и базовым аудитом учётных записей.
PowerShell Remoting позволяет выполнять команды на удалённых компьютерах через WinRM.
Это один из ключевых инструментов для централизованного администрирования Windows Server.
Включение Remoting на сервере
# Запускать от имени администратора
Enable-PSRemoting -Force
# Проверить доступность WinRM
Test-WSMan server01
# Интерактивная сессия
Enter-PSSession -ComputerName server01
# Выполнить команду удаленно
Invoke-Command -ComputerName server01 -ScriptBlock {
Get-Service | Where-Object Status -eq 'Stopped'
}
В доменной среде Remoting обычно работает проще. В workgroup-сценариях потребуется настроить TrustedHosts,
HTTPS listener или корректную схему аутентификации. Не открывайте WinRM наружу в интернет.
CSV, JSON, XML и HTML
PowerShell силён в подготовке отчётов. Он умеет импортировать и экспортировать CSV, JSON, XML,
а также быстро формировать HTML-таблицы для отправки по почте или публикации на внутреннем портале.
Ниже — базовый набор команд для первичной диагностики сервера: версия ОС, аптайм,
диски, сетевые настройки, роли, обновления, перезагрузка и pending reboot.
# Только Windows Server
Get-WindowsFeature | Where-Object Installed -eq $true
# Установка роли, пример: Web Server IIS
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
Active Directory
Для работы с AD нужен модуль ActiveDirectory, обычно ставится через RSAT или доступен
на контроллере домена. Большинство команд начинается с Get-AD..., New-AD...,
Set-AD..., Remove-AD....
PowerShell хорошо подходит для автоматизации Hyper‑V: создание виртуальных машин,
управление состоянием, чекпоинты, экспорт, подключение ISO и проверка ресурсов.
Для управления IIS используется модуль WebAdministration. Через него можно смотреть сайты,
пулы приложений, биндинги, перезапускать AppPool и автоматизировать базовое обслуживание веб-сервера.
Основные команды IIS
Import-Module WebAdministration
# Список сайтов
Get-Website
# Список пулов приложений
Get-ChildItem IIS:\AppPools
# Перезапуск пула
Restart-WebAppPool -Name 'DefaultAppPool'
# Статус сайта
Get-Website -Name 'Default Web Site' | Select-Object Name, State, PhysicalPath, Bindings
Готовые скрипты
Ниже — набор практических скриптов для повседневной работы. Перед использованием в боевой среде
проверьте пути, права доступа, имена серверов и запустите сначала в тестовом режиме.
1. Комплексный отчёт о компьютере
Собирает имя ПК, ОС, аптайм, процессор, память, диски и IP-адреса. Подходит для первичной инвентаризации.
PowerShell-скрипт в администрировании должен быть не просто рабочим, а безопасным,
понятным, повторяемым и пригодным для запуска другим человеком.
1. Используйте полные имена команд
В интерактивной консоли можно писать ls и ?, но в скриптах лучше Get-ChildItem и Where-Object.
2. Добавляйте -WhatIf
Для опасных операций сначала проверяйте эффект: удаление, изменение AD, реестра, служб, файлов.
3. Логируйте действия
Минимум: Start-Transcript или запись в лог через Out-File -Append.
4. Обрабатывайте ошибки
Используйте try/catch, -ErrorAction Stop и понятные сообщения об ошибках.
5. Не храните пароли в коде
Не вставляйте пароли открытым текстом. Используйте безопасные хранилища, Managed Service Accounts или секреты.
6. Делайте параметры
Скрипт с param() проще переиспользовать, тестировать и запускать из планировщика.
Шаблон аккуратного скрипта
Script template
<#
.SYNOPSIS
Краткое описание скрипта.
.DESCRIPTION
Подробное описание, что делает скрипт и какие есть ограничения.
.EXAMPLE
.\Script.ps1 -Path C:\Logs -Days 30
#>
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true)]
[string]$Path,
[int]$Days = 30
)
$ErrorActionPreference = 'Stop'
$LogPath = "C:\Temp\script-$(Get-Date -Format 'yyyyMMdd-HHmmss').log"
Start-Transcript -Path $LogPath
try {
if (-not (Test-Path $Path)) {
throw "Путь не найден: $Path"
}
$Files = Get-ChildItem $Path -Recurse -File |
Where-Object LastWriteTime -lt (Get-Date).AddDays(-$Days)
foreach ($File in $Files) {
if ($PSCmdlet.ShouldProcess($File.FullName, 'Remove old file')) {
Remove-Item $File.FullName -Force
}
}
}
catch {
Write-Error "Ошибка: $($_.Exception.Message)"
}
finally {
Stop-Transcript
}
Чек-лист перед запуском скрипта в проде
Проверить, что скрипт не содержит паролей, токенов и лишних прав.
Запустить в тестовой среде или на одном пилотном сервере.
Использовать -WhatIf для операций изменения.
Проверить права запуска и контекст: пользователь, SYSTEM, сервисная учётка.
Добавить логирование результата и ошибок.
Проверить кодировку файлов: для русского текста использовать UTF‑8.
Подготовить план отката, если скрипт меняет AD, реестр, службы или файлы.
Главный принцип: сначала получить данные через Get-*, затем отфильтровать,
потом проверить через -WhatIf, и только после этого выполнять изменение через Set-*,
New-*, Remove-* или Restart-*.