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

Скриптове и команди в PowerShell
Пълно практическо ръководство — от първи стъпки до автоматизация на системни задачи. Включва реални скриптове за ежедневна употреба.
⚡ Какво е PowerShell?
PowerShell е мощна командна обвивка и скриптов език, разработен от Microsoft. Изграден е върху .NET платформата и работи с обекти, а не само с текст.
Създаден е през 2006 г. като отговор на ограниченията на класическия Command Prompt. Днес PowerShell е кросплатформен — работи на Windows, macOS и Linux.
Всеки администратор, DevOps инженер или напреднал потребител на Windows трябва да познава PowerShell. Той е незаменим инструмент за автоматизация, диагностика и управление на системи.
✓ Предимства на PowerShell
|.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 скриптове, прости задачи |
dir, ipconfig, ping) работят и в PowerShell. Можете да ги използвате директно.📖 Основни концепции
Cmdlet — основна единица в PowerShell
Всяка PowerShell команда се нарича cmdlet (command-let). Следва строга конвенция: Глагол-Съществително.
Get-Process # Вземи списък с процеси Stop-Process # Спри процес Set-Location # Смени директория (като cd) New-Item # Създай файл или папка Remove-Item # Изтрий файл или папка Get-Help Get-Process # Покажи помощ за Get-Process
Pipeline — свързване на команди
Символът | предава изхода на една команда като вход на следващата. Това е сърцето на PowerShell.
# Намери всички процеси над 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-Process Get-Help Get-Process # Покажи всички параметри с описания Get-Help Get-Process -Full # Покажи само примери за употреба Get-Help Get-Process -Examples # Намери всички команди свързани с "process" Get-Command -Noun Process # Актуализирай помощната система Update-Help -Force
# Информация за 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)}}
# Покажи само работещите услуги 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
# Последните 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 (само веднъж) 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
# Регистрирай App Installer (winget) Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe # Търси приложение winget search "Visual Studio Code" # Инсталирай приложение winget install Microsoft.VisualStudioCode # Актуализирай всичко winget upgrade --all
# Копирай файл в папка 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
# Отвори 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")
# Тест на свързаност (като 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
# Изключи 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"
$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"
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 за автодовършване на команди, параметри и пътища.Ctrl+R за търсене в историята.ls, dir, cd, cls работят в PowerShell. Можеш да добавяш свои.$PROFILE за персонализирани функции при всяко стартиране.Set-ExecutionPolicy RemoteSigned -Scope CurrentUser за да позволиш локални скриптове.Намерихте материала за полезен?
Съдържанието на itpraktika.com е безплатно и ще остане такова.
Ако статията ти е помогнала — можеш да подкрепиш сайта с малка доброволна сума.
Всяко дарение помага за поддръжката и развитието на портала.
