PowerShell to zaawansowana powłoka wiersza poleceń i język skryptowy od Microsoftu, który zrewolucjonizował sposób zarządzania infrastrukturą IT. Dla administratorów Windows Server to absolutnie niezbędne narzędzie — pozwala automatyzować powtarzalne zadania, zarządzać setkami serwerów jednocześnie i wykonywać w minuty operacje, które ręcznie zajmowałyby godziny.
Czym jest PowerShell i dlaczego każdy administrator powinien go znać?
PowerShell to znacznie więcej niż zwykły wiersz poleceń. To obiektowy język skryptowy oparty na platformie .NET, który pozwala na interakcje z praktycznie każdym elementem ekosystemu Windows — od systemu plików, przez rejestr, po Active Directory, Hyper-V i usługi chmurowe Azure.
- Obiektowość — PowerShell operuje na obiektach .NET, nie na tekście.
- Potoki (pipeline) — wyniki jednego polecenia można przekazać do następnego.
- Cmdlety — polecenia Czasownik-Rzeczownik (
Get-Process,Set-Service). - Zdalny dostęp — zarządzanie wieloma serwerami jednocześnie.
- Rozszerzalność — moduły dla AD, Exchange, SQL Server, Azure.
PowerShell vs CMD vs Bash
| Cecha | CMD | Bash | PowerShell 7 |
|---|---|---|---|
| Typ danych | Tekst | Tekst | Obiekty .NET |
| Wieloplatformowość | Tylko Windows | Linux/macOS | Windows, Linux, macOS |
| Zarządzanie AD | Ograniczone | Brak | Pełne moduły |
| Zdalne zarządzanie | PsExec | SSH | WinRM + SSH + PSRemoting |
| Obsługa błędów | Kody wyjścia | trap | Try/Catch/Finally |
Dla administratora Windows Server 2022 czy Windows Server 2025 PowerShell to optymalne narzędzie.
Instalacja PowerShell 7 na Windows Server
winget install --id Microsoft.PowerShell --source wingetiex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI -Quiet"Po instalacji: pwsh --version. PS 7 współistnieje z PS 5.1.
Podstawowe cmdlety
Procesy i usługi
Get-Process | Where-Object { $_.WorkingSet64 -gt 100MB } | Sort-Object WorkingSet64 -Descending Restart-Service -Name "Spooler" -Force Get-Service -Name "DNS","NTDS","W3SVC" | Format-Table Name, Status, StartTypePliki
Get-ChildItem -Path "C: Logs" -Recurse -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -ForceSystem
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, FreePhysicalMemory Get-CimInstance Win32_LogicalDisk | Select-Object DeviceID, @{N='FreeGB';E={[math]::Round($_.FreeSpace/1GB,2)}} Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10Skryptowanie — zmienne, pętle, funkcje
$servers = @("DC01", "SQL01", "WEB01", "FILE01") $freeSpace = (Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace / 1GB if ($freeSpace -lt 10) { Write-Warning "KRYTYCZNIE: Mniej niż 10 GB!" } elseif ($freeSpace -lt 50) { Write-Warning "Mniej niż 50 GB wolnego." } else { Write-Host "OK: $([math]::Round($freeSpace,2)) GB wolnego." -ForegroundColor Green } foreach ($server in $servers) { $status = Invoke-Command -ComputerName $server -ScriptBlock { Get-Service "W32Time" | Select-Object Status } Write-Host "$server - W32Time: $($status.Status)" }function Test-ServerHealth { [CmdletBinding()] param([Parameter(Mandatory,ValueFromPipeline)][string[]]$ComputerName, [int]$CpuThreshold=80) process { foreach ($c in $ComputerName) { $cpu = (Get-CimInstance -ComputerName $c Win32_Processor | Measure-Object LoadPercentage -Average).Average [PSCustomObject]@{ Server=$c; CpuPct=$cpu; Alert=$cpu -gt $CpuThreshold } } } } "DC01","SQL01" | Test-ServerHealth | Format-TableZarządzanie Active Directory
Active Directory to serce każdej infrastruktury Windows:
Install-WindowsFeature -Name RSAT-AD-PowerShell Get-ADUser -Filter {LastLogonDate -lt $((Get-Date).AddDays(-90)) -and Enabled -eq $true} -Properties LastLogonDate | Export-Csv "InactiveUsers.csv" Import-Csv "NewUsers.csv" | ForEach-Object { New-ADUser -Name "$($_.FirstName) $($_.LastName)" -SamAccountName $_.Username -Enabled $true -ChangePasswordAtLogon $true } Search-ADAccount -LockedOut | ForEach-Object { Unlock-ADAccount -Identity $_.SamAccountName }Zarządzanie Hyper-V
Moduł Hyper-V pozwala zarządzać VM z konsoli:
Get-VM | Format-Table Name, State, CPUUsage, MemoryAssigned, Uptime New-VM -Name "WebServer01" -MemoryStartupBytes 4GB -NewVHDPath "D: VMs WebServer01.vhdx" -NewVHDSizeBytes 60GB -Generation 2 Set-VM -Name "WebServer01" -ProcessorCount 4 -DynamicMemory -MemoryMinimumBytes 2GB -MemoryMaximumBytes 8GB Checkpoint-VM -Name "WebServer01" -SnapshotName "Pre-Update" Get-VM | Where-Object { $_.State -eq 'Off' } | Start-VMZdalne zarządzanie — PSRemoting
Enable-PSRemoting -Force Enter-PSSession -ComputerName "DC01" -Credential (Get-Credential) $results = Invoke-Command -ComputerName @("DC01","SQL01","WEB01") -ScriptBlock { [PSCustomObject]@{ Server=$env:COMPUTERNAME; Uptime=((Get-Date)-(gcim Win32_OperatingSystem).LastBootUpTime).Days; FreeGB=[math]::Round((gcim Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace/1GB,2) } } $results | Format-TableHarmonogram zadań
$action = New-ScheduledTaskAction -Execute "pwsh.exe" -Argument "-File C: Scripts DailyReport.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At "06:00AM" Register-ScheduledTask -TaskName "Daily Report" -Action $action -Trigger $trigger -Principal (New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest)Bezpieczeństwo — Execution Policy i JEA
Get-ExecutionPolicy -List Set-ExecutionPolicy RemoteSigned -Scope LocalMachine # JEA New-PSRoleCapabilityFile -Path "HelpDesk.psrc" -VisibleCmdlets @('Restart-Service','Get-Service','Unlock-ADAccount') Start-Transcript -Path "C: PSTranscripts session.txt"Gotowe skrypty
Monitor serwerów
@("DC01","SQL01","WEB01") | ForEach-Object { [PSCustomObject]@{ Server=$_; Status=if(Test-Connection $_ -Count 2 -Quiet){"ONLINE"}else{"OFFLINE"} } } | Format-TableCzyszczenie dysków
@("C: Windows Temp","C: inetpub logs") | ForEach-Object { if (Test-Path $_) { Get-ChildItem $_ -Recurse -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -Force -EA SilentlyContinue } }Często zadawane pytania (FAQ)
Co to jest PowerShell?
Zaawansowana powłoka i język skryptowy Microsoftu do automatyzacji administracji Windows, Active Directory, Hyper-V, Exchange i Azure.
Jak uruchomić PowerShell jako administrator?
Win+X → Terminal (Admin) w Windows 11, lub PPM na ikonę → Uruchom jako administrator.
PowerShell 5.1 vs 7?
PS 5.1 = .NET Framework, tylko Windows. PS 7 = .NET 8, wieloplatformowy. Uruchamiaj pwsh (PS7) vs powershell (PS 5.1).
Czy PowerShell jest bezpieczny?
Tak — Execution Policy, JEA, Constrained Language Mode, Script Block Logging.
Jak się nauczyć?
Get-Help, Get-Command, Get-Member. Ćwicz na VM Hyper-V. Kurs "PowerShell 101" na learn.microsoft.com.
Potrzebujesz licencji Windows Server?
Oryginalne klucze z dostawą e-mailem w 1–3 min.
Artykuł zaktualizowany: marzec 2026 | Autor: Zespół KluczeSoft

Masz pytanie do tego artykułu?
Zespół KluczeSoft chętnie odpowie. Pomagamy w wyborze licencji Microsoft, faktur KSeF i zakupach B2B.
Skontaktuj się Centrum pomocy