Τι είναι ο κώδικας PowerShell και γιατί να τον μάθετε
Ο κώδικας PowerShell αποτελεί ένα από τα πιο ισχυρά εργαλεία αυτοματισμού που έχει δημιουργήσει η Microsoft. Από την πρώτη του κυκλοφορία το 2006, εξελίχθηκε σε μία γλώσσα σεναρίων βασισμένη στο .NET, η οποία επιτρέπει σε διαχειριστές συστημάτων, προγραμματιστές και προχωρημένους χρήστες να εκτελούν γρήγορα και αποτελεσματικά εργασίες ρουτίνας, διαχείρισης και συντήρησης. Η κύρια διαφορά του από τα κλασικά command shells είναι ότι λειτουργεί με αντικείμενα και όχι με απλό κείμενο. Κάθε εντολή (cmdlet) επιστρέφει δομημένα δεδομένα που μπορούν να φιλτραριστούν, να ανακατευθυνθούν και να χρησιμοποιηθούν σε διοχετεύσεις (pipelines) με φυσικό τρόπο. Σήμερα, το PowerShell είναι διαθέσιμο για Windows, Linux και macOS, και ο κώδικάς του γράφεται με επέκταση .ps1. Το γεγονός ότι είναι ανοιχτού κώδικα (MIT license) από το 2016 έχει αυξήσει ακόμα περισσότερο την κοινότητα και τη χρησιμότητά του.
Για να γράψετε τον πρώτο σας κώδικα PowerShell, δεν χρειάζεστε τίποτα περισσότερο από έναν επεξεργαστή κειμένου και το PowerShell console. Ακόμα και χωρίς προηγούμενη εμπειρία σε scripting, η γλώσσα είναι φιλική χάρη στα ονόματα ρημάτων-ουσιαστικών των cmdlet, όπως Get-Help, Set-Location, Get-Process. Μάλιστα, η εντολή Get-Help είναι το πρώτο βήμα για να μάθετε νέες εντολές και παραμέτρους. Στον οδηγό αυτόν θα δούμε τα βασικά δομικά στοιχεία του κώδικα PowerShell, χρήσιμα παραδείγματα και πρακτικές συμβουλές για να τον αξιοποιήσετε καθημερινά.

Βασικές έννοιες και δομές του PowerShell
Στο PowerShell, κάθε εντολή είναι ένα cmdlet (προφέρεται command-let). Τα cmdlet είναι μικρές, ειδικές λειτουργίες που συνήθως ακολουθούν τη μορφή Ρήμα-Ουσιαστικό. Για παράδειγμα, Get-Service, Set-Location, Remove-Item. Μπορείτε να χρησιμοποιήσετε παραμέτρους για να συγκεκριμενοποιήσετε την ενέργεια, και να ενώσετε πολλαπλά cmdlet σε μία γραμμή με τον τελεστή σωλήνας (|). Η διοχέτευση μεταφέρει αντικείμενα από το ένα cmdlet στο επόμενο, επιτρέποντας προηγμένο φιλτράρισμα χωρίς να χρειάζεται να αποθηκεύετε προσωρινά δεδομένα.
Ο κώδικας PowerShell υποστηρίζει μεταβλητές, οι οποίες ξεκινούν με $. Μπορείτε να αποθηκεύσετε αριθμούς, συμβολοσειρές, πίνακες ή ολόκληρα αντικείμενα. Οι μεταβλητές δεν δηλώνονται με συγκεκριμένο τύπο, παρόλο που μπορείτε να χρησιμοποιήσετε ισχυρή πληκτρολόγηση αν θέλετε. Οι δομές ελέγχου περιλαμβάνουν if, else, switch, while, do-while, for, και foreach. Το foreach είναι ιδιαίτερα χρήσιμο για την επεξεργασία συλλογών, π.χ. λίστες υπηρεσιών ή χρηστών. Επιπλέον, υπάρχουν δυνατότητες για χειρισμό σφαλμάτων (try/catch), συναρτήσεις (function), και modules για οργάνωση κώδικα.

Τα πιο χρήσιμα cmdlet για καθημερινές εργασίες
Παρακάτω παρουσιάζεται μία λίστα με μερικά από τα πιο δημοφιλή cmdlet που θα συναντήσετε συχνά όταν γράφετε κώδικα PowerShell:
- Get-Help – Εμφανίζει βοήθεια για οποιοδήποτε cmdlet, συμπεριλαμβανομένων παραδειγμάτων.
- Get-Process – Λαμβάνει πληροφορίες για τρέχουσες διεργασίες.
- Get-Service – Επιστρέφει κατάσταση υπηρεσιών (σε λειτουργία, σταματημένες κ.λπ.).
- Get-EventLog – Διαβάζει αρχεία καταγραφής συμβάντων των Windows.
- Set-ExecutionPolicy – Ορίζει την πολιτική εκτέλεσης σεναρίων (περιορισμένη, unrestricted, remote signed κ.ά.).
- Get-ADUser – Ανακτά αντικείμενα χρηστών από το Active Directory.
- Get-ADComputer – Αντίστοιχο για υπολογιστές στο AD.
- Remove-Item – Διαγράφει αρχεία, φακέλους ή κλειδιά μητρώου.
- Select-Object – Επιλέγει συγκεκριμένες ιδιότητες από αντικείμενα.
- Where-Object – Φιλτράρει αντικείμενα βάσει συνθήκης.
Πίνακας σύγκρισης εκδόσεων PowerShell
Το PowerShell έχει εξελιχθεί σημαντικά από την αρχική του μορφή (γνωστή ως Monad). Στον παρακάτω πίνακα βλέπετε τις βασικές εκδόσεις και τα κύρια χαρακτηριστικά τους:

| Έκδοση | Έτος κυκλοφορίας | Βασικό χαρακτηριστικό |
|---|---|---|
| Windows PowerShell 1.0 | 2006 | Πρώτη επίσημη έκδοση, βασισμένη σε .NET Framework, μόνο για Windows. |
| Windows PowerShell 2.0 | 2009 | Εισαγωγή της απομακρυσμένης διαχείρισης (Remoting), modules, και εκτέλεσης σεναρίων με υπογραφή. |
| Windows PowerShell 5.1 | 2016 | Τελευταία έκδοση του Windows PowerShell, με πακέτο Desired State Configuration (DSC). |
| PowerShell Core 6.0 | 2018 | Ανοιχτού κώδικα, πολλαπλών πλατφορμών (Windows, Linux, macOS), βασισμένο σε .NET Core. |
| PowerShell 7.0 | 2020 | Συγχώνευση των δυνατοτήτων των προηγούμενων εκδόσεων, βελτιωμένη συμβατότητα, νέοι τελεστές. |
Πολιτική εκτέλεσης και ασφάλεια στον κώδικα PowerShell
Όταν γράφετε κώδικα PowerShell, η ασφάλεια είναι κρίσιμη. Η πολιτική εκτέλεσης (Execution Policy) καθορίζει ποια σενάρια μπορούν να τρέξουν στο σύστημά σας. Υπάρχουν διάφορες πολιτικές: Restricted (κανένα σενάριο δεν εκτελείται), AllSigned (μόνο υπογεγραμμένα σενάρια από αξιόπιστο εκδότη), RemoteSigned (τα τοπικά σενάρια εκτελούνται, τα απομακρυσμένα πρέπει να είναι υπογεγραμμένα), και Unrestricted (όλα τα σενάρια εκτελούνται, με προειδοποίηση). Για να δείτε την τρέχουσα πολιτική σας, χρησιμοποιήστε Get-ExecutionPolicy. Για να την αλλάξετε, τρέξτε Set-ExecutionPolicy με δικαιώματα διαχειριστή. Συνιστάται να μην χαλαρώνετε υπερβολικά την πολιτική, ειδικά σε παραγωγικά περιβάλλοντα. Μπορείτε να υπογράψετε τα δικά σας σενάρια με πιστοποιητικό αυτό-έκδοσης ή από αρχή πιστοποίησης.
Εκτός από την πολιτική, η Microsoft έχει ενσωματώσει μηχανισμούς όπως το System-wide transcript (Start-Transcript) και το logging για να παρακολουθείτε τι εκτελείται. Επίσης, αποφύγετε την εκτέλεση κώδικα από άγνωστες πηγές χωρίς έλεγχο. Με την έλευση του PowerShell Core, η κοινότητα παρέχει πολλά modules μέσω του PowerShell Gallery (PSGallery), αλλά πάντα ελέγχετε το περιεχόμενο πριν το εγκαταστήσετε.

Παράδειγμα κώδικα: Λήψη χρηστών Active Directory που δημιουργήθηκαν τις τελευταίες 7 ημέρες
Ένα τυπικό σενάριο διαχείρισης είναι η αναζήτηση νέων χρηστών στο Active Directory. Ο παρακάτω κώδικας PowerShell δείχνει πώς να βρείτε λογαριασμούς που δημιουργήθηκαν την τελευταία εβδομάδα:
$Fecha = (Get-Date).AddDays(-7)
Get-ADUser -Filter {whenCreated -ge $Fecha} -Properties Name,Enabled,whenCreated | Select-Object Name,Enabled,whenCreated
Η πρώτη γραμμή υπολογίζει την ημερομηνία πριν από 7 ημέρες και την αποθηκεύει στη μεταβλητή $Fecha. Στη συνέχεια, το cmdlet Get-ADUser φιλτράρει τους χρήστες βάσει του πεδίου whenCreated (ημερομηνία δημιουργίας). Με το -ζητάμε επιπλέον τις ιδιότητες Name, Enabled, whenCreated, και τέλος το Select-Object εμφανίζει μόνο αυτά τα τρία πεδία. Αυτός ο κώδικας είναι απλός, αλλά ιδιαίτερα χρήσιμος για εβδομαδιαίες αναφορές ή για αυτοματοποίηση ειδοποιήσεων. Για να τρέξει, χρειάζεστε το module ActiveDirectory το οποίο είναι διαθέσιμο σε συστήματα με τον ρόλο RSAT.

Προηγμένες δυνατότητες: απομακρυσμένη διαχείριση και διοχετεύσεις αντικειμένων
Ένα από τα μεγαλύτερα πλεονεκτήματα του PowerShell είναι η δυνατότητα εκτέλεσης εντολών σε απομακρυσμένους υπολογιστές μέσω του PowerShell Remoting. Χρησιμοποιώντας το cmdlet Enter-PSSession (για διαδραστική σύνδεση) ή Invoke-Command (για εκτέλεση μίας εντολής), μπορείτε να διαχειριστείτε δεκάδες servers χωρίς να χρειάζεται να συνδεθείτε σε καθέναν ξεχωριστά. Αυτή η λειτουργία βασίζεται στο WS-Management και λειτουργεί τόσο σε Windows όσο και σε Linux (με PowerShell Core).
Η διοχέτευση αντικειμένων είναι η καρδιά του PowerShell. Κάθε cmdlet παράγει αντικείμενα με ιδιότητες (όπως Name, Status, etc.) που μπορούν να περάσουν σε επόμενο cmdlet. Για παράδειγμα, Get-Service | Where-Object {$_.Status -eq 'Running'} επιστρέφει μόνο τις υπηρεσίες που τρέχουν. Μπορείτε να φιλτράρετε, να ταξινομήσετε, να ομαδοποιήσετε και να εξάγετε δεδομένα σε CSV ή JSON χωρίς μεγάλη προσπάθεια. Αυτή η αντικειμενοστραφής προσέγγιση κάνει τον κώδικα PowerShell πιο ευανάγνωστο και λιγότερο επιρρεπή σε λάθη σε σύγκριση με κλασικά shell scripts που βασίζονται σε κείμενο.
Πού να βρείτε βοήθεια και να μάθετε περισσότερα
Για να εμβαθύνετε στον κώδικα PowerShell, η επίσημη τεκμηρίωση της Microsoft είναι ανεκτίμητη. Συνιστάται να επισκεφθείτε τον ιστότοπο Microsoft Learn, όπου υπάρχουν διαδραστικά μαθήματα, ενότητες scripting και πλήρεις αναφορές cmdlet. Μπορείτε να δείτε την Περιγραφή PowerShell από τη Microsoft για μια συνολική εισαγωγή.
Επιπλέον, ιστοσελίδες όπως η IONOS παρέχουν χρήσιμες λίστες με δημοφιλή cmdlet και παραδείγματα. Ανατρέξτε στο Top 40 Cmdlet της IONOS για μια γρήγορη αναφορά εντολών. Τέλος, το επίσημο αποθετήριο GitHub του PowerShell (PowerShell/PowerShell) είναι η καλύτερη πηγή για να κατανοήσετε την αρχιτεκτονική, να αναφέρετε σφάλματα ή να συνεισφέρετε εσείς οι ίδιοι.
Συμπέρασμα
Ο κώδικας PowerShell δεν είναι απλώς μία γλώσσα σεναρίων, αλλά ένα ολόκληρο ο





