Skrypty PowerShell dla Windows: Automatyzacja zadań administracyjnych
⚙️ Skrypty PowerShell dla Windows: Automatyzacja zadań administracyjnych
💡 Wprowadzenie do PowerShell
PowerShell to potężna powłoka skryptowa opracowana przez Microsoft, która pozwala na kompleksowe zarządzanie systemem Windows. Umożliwia wykonywanie zarówno prostych komend, jak i tworzenie skomplikowanych automatyzacji — wszystko w duchu Infrastructure as Code (IaC).
📌 PowerShell to nie tylko alternatywa dla CMD — to środowisko programistyczne i administracyjne w jednym.
🔍 Dlaczego warto używać skryptów PowerShell?
- Automatyzacja rutynowych zadań (tworzenie kont, zmiana haseł, backupy)
- Zarządzanie konfiguracją wielu komputerów jednocześnie
- Szybkie wdrażanie polityk i zmian
- Tworzenie raportów i audytów
- Integracja z Active Directory, Exchange, Azure i innymi technologiami Microsoft

🧱 Podstawy składni i struktura skryptu
🔤 Przykład prostego skryptu .ps1
:
# Skrypt sprawdzający status usługi Windows Update
$usluga = Get-Service -Name wuauserv
if ($usluga.Status -eq 'Running') {
Write-Output "Usługa Windows Update działa."
} else {
Start-Service -Name wuauserv
Write-Output "Usługa została uruchomiona."
}
🔑 Kluczowe elementy:
Cmdlet
: np.Get-Service
,Start-Service
Zmienne
:$nazwa
,$true
,$false
Warunki
:if
,else
,switch
Pętle
:foreach
,for
,while
🛠️ Typowe zadania administracyjne – skrypty krok po kroku
🧑💻 Tworzenie kont użytkowników w Active Directory:
Import-Module ActiveDirectory
New-ADUser -Name "Jan Kowalski" -SamAccountName "jkowalski" -UserPrincipalName "jkowalski@firma.local" `
-Path "OU=Uzytkownicy,DC=firma,DC=local" -AccountPassword (ConvertTo-SecureString "SilneHaslo2025!" -AsPlainText -Force) -Enabled $true
📁 Tworzenie struktury folderów z uprawnieniami:
New-Item -Path "C:\DzialIT" -ItemType Directory
$acl = Get-Acl "C:\DzialIT"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("DzialIT","FullControl","Allow")
$acl.AddAccessRule($rule)
Set-Acl "C:\DzialIT" $acl
🧾 Raportowanie logowań użytkowników:
Get-EventLog -LogName Security -InstanceId 4624 -After (Get-Date).AddDays(-1) |
Select-Object TimeGenerated, EntryType, Message |
Export-Csv -Path "C:\Raporty\logowania.csv" -NoTypeInformation
🧬 Zaawansowane scenariusze automatyzacji
🔄 Masowe resetowanie haseł użytkowników:
$users = Get-ADUser -Filter {Enabled -eq $true -and PasswordNeverExpires -eq $false}
foreach ($user in $users) {
Set-ADAccountPassword -Identity $user.SamAccountName -Reset -NewPassword (ConvertTo-SecureString "NoweHaslo!" -AsPlainText -Force)
}
🗃️ Backup ustawień systemowych:
$backupPath = "C:\Backup\System_" + (Get-Date -Format "yyyyMMdd_HHmmss")
New-Item -ItemType Directory -Path $backupPath
Copy-Item "C:\Windows\System32\config" -Destination $backupPath -Recurse
🔐 Bezpieczeństwo i najlepsze praktyki
- Weryfikacja podpisów skryptów – używaj podpisów cyfrowych (
Set-ExecutionPolicy AllSigned
) - Używaj kont o minimalnych uprawnieniach
- Loguj działania administracyjne i archiwizuj wyniki
- Oddzielaj logikę i konfigurację (np. używaj plików .json/.xml/.csv do wejścia)
📦 Tworzenie własnego modułu PowerShell
Moduły pozwalają na tworzenie zorganizowanych bibliotek funkcji.
📁 Struktura:
MyModule\
│ MyModule.psm1
│ MyModule.psd1
📜 Przykład funkcji:
function Restart-PrinterSpooler {
Stop-Service -Name "Spooler"
Start-Service -Name "Spooler"
}
Użycie:
Import-Module .\MyModule.psm1
Restart-PrinterSpooler
🌐 Zarządzanie zdalne i automatyzacja wielu hostów
🔧 PowerShell Remoting:
Enable-PSRemoting -Force
Invoke-Command -ComputerName "Komputer01" -ScriptBlock { Get-Service Spooler }
🖥️ Zbieranie danych z wielu komputerów:
$komputery = Get-Content .\lista_komputerow.txt
foreach ($pc in $komputery) {
Invoke-Command -ComputerName $pc -ScriptBlock { Get-ComputerInfo | Select-Object OSName, CsName }
}
⏰ Harmonogram zadań i uruchamianie cykliczne
Tworzenie zadania:
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Skrypty\Backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 3am
Register-ScheduledTask -TaskName "BackupSystemu" -Action $action -Trigger $trigger -User "SYSTEM"
🧾 Podsumowanie
Tworzenie skryptów PowerShell to esencja nowoczesnej administracji Windows. Dzięki niemu oszczędzasz czas, zwiększasz niezawodność operacji i unikasz błędów ludzkich. Jeśli dopiero zaczynasz, rozpocznij od automatyzacji codziennych zadań. Z czasem stworzysz własne biblioteki, harmonogramy i procesy DevOps w środowisku Microsoft.