Скриптове и команди в PowerShell

Скриптове и команди в PowerShell
Скриптове и команди в PowerShell
Ръководство за начинаещи и напреднали

Скриптове и команди в PowerShell

Пълно практическо ръководство — от първи стъпки до автоматизация на системни задачи. Включва реални скриптове за ежедневна употреба.

⚡ Какво е PowerShell?

PowerShell е мощна командна обвивка и скриптов език, разработен от Microsoft. Изграден е върху .NET платформата и работи с обекти, а не само с текст.

Създаден е през 2006 г. като отговор на ограниченията на класическия Command Prompt. Днес PowerShell е кросплатформен — работи на Windows, macOS и Linux.

Всеки администратор, DevOps инженер или напреднал потребител на Windows трябва да познава PowerShell. Той е незаменим инструмент за автоматизация, диагностика и управление на системи.

✓ Предимства на PowerShell

🧩
Обектно-ориентиран
Командите връщат .NET обекти, не просто текст. Лесно се филтрират и обработват данните.
🔄
Pipeline — свързване на команди
Изходът на една команда се подава директно на следващата чрез символа |.
📦
Богата стандартна библиотека
Хиляди вградени cmdlet-и за управление на файлове, мрежа, процеси и много повече.
🤝
Интеграция с .NET и WMI
Директен достъп до .NET Framework и Windows Management Instrumentation (WMI/CIM).
🌍
Кросплатформен
PowerShell Core работи на Windows, macOS и Linux — един скрипт навсякъде.
📚
Вградена помощна система
Get-Help, Get-Command и Tab autocomplete правят обучението интуитивно.
🔒
Сигурност и политики
Execution Policy контролира кои скриптове могат да се изпълняват. Поддържа подписване.
🔧
Разширяемост с модули
PowerShell Gallery съдържа хиляди безплатни модули. Лесна инсталация с Install-Module.

⚔ PowerShell срещу Command Prompt (CMD)

Двата инструмента съществуват паралелно в Windows. Ето ключовите разлики:

Характеристика PowerShell Command Prompt (CMD)
Тип данни.NET обекти — структурирани и типизирани данниСамо текст — прост низ от символи
Скриптов езикПълноценен език с цикли, функции, класовеОграничен — само batch (.bat) скриптове
PipelineПредава обекти между команди (|)Предава само текстов стринг
СинтаксисVerb-Noun: Get-Process, Set-ItemКратки имена: dir, copy, del
Достъп до систематаWMI, CIM, .NET, Registry, COM обектиОграничен — само основни системни команди
Обработка на грешкиTry/Catch/Finally блокове — пълен контролСамо проверка на %ERRORLEVEL%
Формати за изходJSON, XML, CSV, HTML, таблицаСамо текстов изход
Помощна системаGet-Help с примери и параметри/? — основна помощна информация
ПлатформиWindows, macOS, LinuxСамо Windows
РазширяемостМодули, PSGallery, pip-подобна системаПрактически никаква
Подходящ заСистемни администратори, DevOps, автоматизацияБърза проверка, legacy скриптове, прости задачи
📌 Съвет: Повечето CMD команди (dir, ipconfig, ping) работят и в PowerShell. Можете да ги използвате директно.

📖 Основни концепции

Cmdlet — основна единица в PowerShell

Всяка PowerShell команда се нарича cmdlet (command-let). Следва строга конвенция: Глагол-Съществително.

Примери за cmdlet
Get-Process          # Вземи списък с процеси
Stop-Process         # Спри процес
Set-Location         # Смени директория (като cd)
New-Item             # Създай файл или папка
Remove-Item          # Изтрий файл или папка
Get-Help Get-Process  # Покажи помощ за Get-Process

Pipeline — свързване на команди

Символът | предава изхода на една команда като вход на следващата. Това е сърцето на PowerShell.

Pipeline примери
# Намери всички процеси над 100MB памет
Get-Process | Where-Object { $_.WorkingSet -gt 100MB }

# Сортирай процесите по CPU
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10

# Запиши изхода в текстов файл
Get-Service | Out-File "C:\services.txt"

Променливи

Работа с променливи
$name = "PowerShell"
$version = 7.4
$isAdmin = $true

# Използвай в низ (string interpolation)
Write-Host "Добре дошли в $name версия $version!"

# Масив
$servers = @("Server1", "Server2", "Server3")

# Хаштаблица (речник)
$config = @{ Host = "localhost"; Port = 8080 }

🔧 Практически скриптове и команди

Следващите примери са разделени по категории. Включват вашите лични команди, допълнени с нови полезни скриптове.

Помощна система — Get-Help
Намерете всичко за параметрите на дадена команда. Незаменимо при обучение.
Документация
powershell
# Покажи помощ за Get-Process
Get-Help Get-Process

# Покажи всички параметри с описания
Get-Help Get-Process -Full

# Покажи само примери за употреба
Get-Help Get-Process -Examples

# Намери всички команди свързани с "process"
Get-Command -Noun Process

# Актуализирай помощната система
Update-Help -Force
Системна информация с CIM/WMI
Извличане на хардуерна и системна информация — BIOS, дискове, дисплей.
Система
powershell
# Информация за BIOS
Get-CimInstance -ClassName Win32_BIOS

# Информация за дисплея/десктопа
Get-CimInstance -ClassName Win32_Desktop

# Само локални дискове (DriveType=3)
Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3"

# Пълен системен профил — процесор, RAM, OS
Get-CimInstance -ClassName Win32_ComputerSystem
Get-CimInstance -ClassName Win32_OperatingSystem
Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores, MaxClockSpeed

# Свободно и общо дисково пространство в GB
Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" |
  Select-Object DeviceID,
    @{N='Size(GB)';E={[math]::Round($_.Size/1GB,2)}},
    @{N='Free(GB)';E={[math]::Round($_.FreeSpace/1GB,2)}}
Управление на услуги (Services)
Намиране, стартиране и спиране на Windows услуги. Полезно при диагностика.
Система
powershell
# Покажи само работещите услуги
Get-Service | Where-Object { $_.Status -eq 'Running' }

# Намери спрени услуги с автоматичен старт
Get-Service | Where-Object { $_.Status -eq 'Stopped' -and $_.StartType -eq 'Automatic' }

# Рестартирай услуга
Restart-Service -Name "Spooler" -Force

# Провери статуса на Windows Update
Get-Service -Name wuauserv | Select-Object Name, Status, StartType
Event Log — журнал на грешки
Бърза диагностика — последните грешки в системния журнал.
Диагностика
powershell
# Последните 10 грешки в Application журнала
Get-EventLog -LogName Application -EntryType Error -Newest 10

# Грешки от последния час в System журнала
Get-WinEvent -FilterHashtable @{
  LogName   = 'System'
  Level     = 2  # 2 = Error
  StartTime = (Get-Date).AddHours(-1)
}

# Критични събития от последните 24 часа
Get-WinEvent -FilterHashtable @{
  LogName   = 'System'
  Level     = 1  # 1 = Critical
  StartTime = (Get-Date).AddDays(-1)
} | Select-Object TimeCreated, Id, Message
Инсталиране на Chocolatey и приложения
Пакетен мениджър за Windows. Инсталирай всяко приложение с една команда.
Инсталация
powershell — изисква администраторски права
# Инсталирай Chocolatey (само веднъж)
Set-ExecutionPolicy Bypass -Scope Process -Force
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# Инсталирай популярни приложения с choco
choco install googlechrome -y
choco install vscode -y
choco install 7zip -y

# Актуализирай всички приложения наведнъж
choco upgrade all -y
WinGet — вграден пакетен мениджър
Регистрирай App Installer — Microsoft-овата алтернатива на Chocolatey.
Инсталация
powershell
# Регистрирай App Installer (winget)
Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe

# Търси приложение
winget search "Visual Studio Code"

# Инсталирай приложение
winget install Microsoft.VisualStudioCode

# Актуализирай всичко
winget upgrade --all
Работа с файлове
Копиране, преместване, масово преименуване и почистване на стари файлове.
Файлове
powershell
# Копирай файл в папка
Copy-Item "C:\File1.txt" "D:\Backup\"

# Копирай цяла папка рекурсивно
Copy-Item "C:\Projects" "D:\Backup\Projects" -Recurse

# Намери всички .log файлове над 10MB
Get-ChildItem "C:\Logs" -Filter "*.log" -Recurse |
  Where-Object { $_.Length -gt 10MB }

# Масово преименуване — замени "стар" с "нов"
Get-ChildItem "C:\Files" | Rename-Item -NewName { $_.Name -replace "стар", "нов" }

# Изтрий файлове по-стари от 30 дни
Get-ChildItem "C:\Temp" -Recurse |
  Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
  Remove-Item -Force
Стартиране на програми и браузър
Отвори URL, стартирай приложение или провери администраторски права.
Инструменти
powershell
# Отвори Chrome с URL
Start-Process chrome.exe "https://www.google.com"

# Отвори файл с програмата по подразбиране
Start-Process "C:\report.pdf"

# Стартирай PowerShell като администратор
Start-Process powershell -Verb RunAs

# Провери дали работиш като администратор
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")
Мрежова диагностика
Проверка на мрежови настройки, активни конекции и тест на свързаност.
Мрежа
powershell
# Тест на свързаност (като ping, но по-богат)
Test-Connection -ComputerName google.com -Count 4

# Покажи всички IPv4 адреси
Get-NetIPAddress | Where-Object { $_.AddressFamily -eq 'IPv4' }

# Активни TCP конекции
Get-NetTCPConnection | Where-Object { $_.State -eq 'Established' }

# DNS справка
Resolve-DnsName google.com

# Скорост на мрежовия адаптер
Get-NetAdapter | Select-Object Name, Status, LinkSpeed
Registry — работа с регистъра
Четене и писане в системния регистър. Включва изключване на Print Screen за Snipping Tool.
Регистър
powershell
# Изключи Print Screen за Snipping Tool (чрез reg add)
reg add "HKCU\Control Panel\Keyboard" /v PrintScreenKeyForSnippingEnabled /t REG_DWORD /d 0 /f



# Същото — чисто в PowerShell
Set-ItemProperty -Path "HKCU:\Control Panel\Keyboard" `
  -Name "PrintScreenKeyForSnippingEnabled" -Value 0

# Прочети стойност от регистъра
Get-ItemProperty -Path "HKCU:\Control Panel\Keyboard"

# Създай нов ключ в регистъра
New-Item -Path "HKCU:\Software\MyApp" -Force
New-ItemProperty -Path "HKCU:\Software\MyApp" -Name "Version" -Value "1.0"
Бонус: Системен отчет в HTML
Генерирай пълен системен доклад и го отвори в браузъра — само с няколко реда.
Диагностика
powershell
$report = [PSCustomObject]@{
  OS       = (Get-CimInstance Win32_OperatingSystem).Caption
  Computer = $env:COMPUTERNAME
  CPU      = (Get-CimInstance Win32_Processor).Name
  RAM_GB   = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)
  Uptime   = (Get-Date) - (gcim Win32_OperatingSystem).LastBootUpTime
}

$report | ConvertTo-Html -Title "Системен отчет" |
  Out-File "$env:TEMP\system_report.html"

Start-Process "$env:TEMP\system_report.html"
Бонус: Мониторинг на CPU в реално време
Следи натоварването на процесора на всеки 2 секунди — директно в конзолата.
Диагностика
powershell — Ctrl+C за спиране
while ($true) {
  $cpu = (Get-CimInstance Win32_Processor).LoadPercentage
  $time = Get-Date -Format "HH:mm:ss"
  Write-Host "[$time] CPU: $cpu%" -ForegroundColor (if ($cpu -gt 80) { "Red" } else { "Green" })
  Start-Sleep -Seconds 2
}

💡 Съвети за продуктивност

Tab Autocomplete
Натисни Tab за автодовършване на команди, параметри и пътища.
📜
История на командите
Натисни стрелка нагоре за предишна команда. Ctrl+R за търсене в историята.
🎨
Псевдоними (Aliases)
ls, dir, cd, cls работят в PowerShell. Можеш да добавяш свои.
📁
Профилен файл
Редактирай $PROFILE за персонализирани функции при всяко стартиране.
Execution Policy: По подразбиране PowerShell блокира скриптове. Изпълни Set-ExecutionPolicy RemoteSigned -Scope CurrentUser за да позволиш локални скриптове.
💡 Препоръка: Използвай Visual Studio Code с разширението PowerShell за писане на скриптове — дава intellisense, дебъгер и вградена конзола.
📖
Може да ви е интересно още
Автоматизирано изграждане на защитен хостинг с Cloudflare Tunnel & Docker
open source spirit
🛠️
$

Намерихте материала за полезен?

Съдържанието на itpraktika.com е безплатно и ще остане такова.
Ако статията ти е помогнала — можеш да подкрепиш сайта с малка доброволна сума. Всяко дарение помага за поддръжката и развитието на портала.

PayPal Revolut

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *


Колко е 1 + 3 ? (въведете числото)