Σε πολλούς ανθρώπους αρέσει να χρησιμοποιούν το PowerShell επειδή τους επιτρέπει να κάνουν πράγματα που δεν μπορούν να γίνουν με το γραφικό περιβάλλον εργασίας των Windows. Ακόμα κι έτσι, δεν υπάρχει αμφιβολία ότι ορισμένα cmdlet PowerShell μπορεί να είναι λίγο κουραστικά ή περίπλοκα. Τι θα γινόταν όμως αν υπήρχε τρόπος να μπορείτε να επεξεργαστείτε αυτά τα cmdlet και να τα κάνετε να «συμπεριφέρονται» όπως θέλετε; Είτε το πιστεύετε είτε όχι, υπάρχει ένας εύκολος τρόπος για να το κάνετε αυτό. Μπορείτε να αλλάξετε τη συμπεριφορά του cmdlet τροποποιώντας τις τιμές των προεπιλεγμένων παραμέτρων του PowerShell. Αυτό το άρθρο θα σας δείξει πώς να χρησιμοποιήσετε τις προεπιλεγμένες παραμέτρους του PowerShell για να αλλάξετε τη συμπεριφορά της εντολής cmdlet.
Προειδοποίηση
Πριν ξεκινήσετε, υπάρχουν μερικά πράγματα που πρέπει να έχετε υπόψη σας. Αν και η αλλαγή των προεπιλεγμένων παραμέτρων του PowerShell και της συμπεριφοράς cmdelt είναι βολική, μπορεί να οδηγήσει σε προβλήματα. Εάν εκτελείτε ένα σενάριο και αυτό το σενάριο υποθέτει ότι το τροποποιημένο cmdlet θα συμπεριφέρεται με συγκεκριμένο τρόπο, ενδέχεται να λάβετε απρόβλεπτα αποτελέσματα. Επομένως, θα πρέπει να φροντίσετε να αλλάξετε προσεκτικά τις προεπιλεγμένες παραμέτρους του PowerShell.
Γρήγορη αναθεώρηση
Υπάρχουν δύο έννοιες του PowerShell που πρέπει να γνωρίζετε για να εργαστείτε με τις προεπιλεγμένες παραμέτρους. Η πρώτη έννοια είναι μεταβλητή. Στο PowerShell, τα ονόματα μεταβλητών ξεκινούν πάντα με ένα σύμβολο δολαρίου και μπορείτε να γράψετε τα περιεχόμενα μιας μεταβλητής πληκτρολογώντας το όνομα της μεταβλητής.
Η δεύτερη έννοια που ίσως γνωρίζετε είναι ο πίνακας κατακερματισμού. Ένας πίνακας κατακερματισμού είναι ουσιαστικά μια λίστα που αποτελείται από ζεύγη κλειδιών/τιμών. Για παράδειγμα, ας υποθέσουμε ότι θέλετε να δημιουργήσετε έναν πίνακα κατακερματισμού που περιέχει τα ονόματα των πολιτειών των ΗΠΑ και τις συντομογραφίες τους. Παρακάτω είναι ο κωδικός:
$StateList = @{}
$StateList.add('Florida','FL')
$StateList.add('South Carolina','SC')
$StateList.add('Georgia','GA')
$StateList
Η πρώτη γραμμή κώδικα δημιουργεί έναν κενό πίνακα κατακερματισμού που ονομάζεται $StateList . Οι επόμενες τρεις γραμμές προσθέτουν καταχωρήσεις στον πίνακα. Κάθε καταχώρηση αποτελείται από ένα κλειδί (όνομα κατάστασης) και μια τιμή (συντομογραφία κατάστασης). Η τελευταία γραμμή παραθέτει τα περιεχόμενα του πίνακα. Μπορείτε να δείτε τον κώδικα σε δράση στην παρακάτω εικόνα.
Αυτό είναι απλώς ένα πολύ απλό παράδειγμα και υπάρχουν πολλοί άλλοι τρόποι χρήσης πινάκων κατακερματισμού.
Εργαστείτε με τις προεπιλεγμένες παραμέτρους του PowerShell
Το PowerShell έχει μια ενσωματωμένη μεταβλητή που χρησιμοποιείται για την αποθήκευση των προεπιλεγμένων παραμέτρων που χρησιμοποιούνται με τα cmdlet του. Αυτή η μεταβλητή ονομάζεται $PSDefaultParameterValues . Όπως ίσως έχετε παρατηρήσει από την αρχική εισαγωγή και το όνομα της μεταβλητής, αυτή δεν είναι μια συνηθισμένη μεταβλητή αλλά ένας πίνακας κατακερματισμού. Ωστόσο, εάν εισαγάγετε το όνομα της μεταβλητής στο PowerShell, θα δείτε γρήγορα ότι ο πίνακας είναι κενός, όπως φαίνεται παρακάτω.

Τι μπορούμε να κάνουμε λοιπόν με αυτήν τη μεταβλητή $PSDefaultParameterValues . Όπως αναφέρθηκε παραπάνω, μπορείτε να ελέγξετε τη συμπεριφορά των cmdlet PowerShell. Το μόνο σημείο είναι ότι δεν μπορείτε να ξεπεράσετε τις εγγενείς δυνατότητες της εντολής cmdlet. Ας δούμε λοιπόν ένα παράδειγμα.
Αυτό το παράδειγμα, μπορεί να μην είναι κάτι που θέλετε να χρησιμοποιήσετε στην πραγματική ζωή, αλλά θα σας δείξει πόσο εύκολο είναι να αλλάξετε ριζικά τη συμπεριφορά του cmdlet. Εάν εισαγάγετε το cmdlet Get-TimeZone στο PowerShell, θα δείτε το όνομα της ζώνης ώρας που ο υπολογιστής σας έχει ρυθμιστεί αυτήν τη στιγμή να χρησιμοποιεί. Μπορείτε να δείτε αυτό το παράδειγμα στην παρακάτω εικόνα.

Τώρα αλλάζουμε αυτό το cmdlet έτσι ώστε να μην εμφανίζει τη ζώνη ώρας που έχει ρυθμιστεί να χρησιμοποιεί το σύστημα, αλλά αντίθετα τις διαθέσιμες ζώνες ώρας. Για να γίνει αυτό, χρειαζόμαστε σύνταξη cmdlet χρησιμοποιώντας το cmdlet Get-Help που ακολουθείται από το cmdlet Get-TimeZone . Μπορείτε να δείτε τη σύνταξη του cmdlet παρακάτω.

Αυτή η σύνταξη περιλαμβάνει μια παράμετρο που ονομάζεται ListAvailable . Πληκτρολογήστε την παρακάτω εντολή:
$PSDefaultParameterValues.Add("Get-TimeZone:ListAvailable",$True)
Το πρώτο μέρος αυτής της εντολής απλώς λέει στο PowerShell ότι θέλετε να προσθέσετε μια τιμή στον πίνακα κατακερματισμού, όπως κάναμε με το παράδειγμα συντομογραφίας της πολιτείας των ΗΠΑ στην προηγούμενη ενότητα. Αυτός ο πίνακας κατακερματισμού περιέχει ένα ζεύγος κλειδιού/τιμής. Σε αυτήν την περίπτωση το κλειδί είναι το όνομα cmdlet (Get-TimeZone) ακολουθούμενο από κόμμα και το όνομα της παραμέτρου που θέλετε να ορίσετε. Σε αυτήν την περίπτωση, το όνομα της παραμέτρου είναι ListAvailable. Το δεύτερο μέρος αυτού του cmdlet είναι η τιμή που θέλετε να αντιστοιχίσετε στην παράμετρο. Εδώ είναι $True . Η παράμετρος ListAvailable δεν χρειάζεται κανονικά μια τιμή, επομένως ο καθορισμός του $True είναι ο τρόπος με τον οποίο λέτε στο PowerShell να χρησιμοποιήσει αυτήν την παράμετρο χωρίς να της εκχωρήσετε μια τιμή.
Αν κοιτάξετε την παρακάτω εικόνα, θα δείτε τι συμβαίνει όταν εκτελείτε το cmdlet Get-TimeZone.

Πράγματα που πρέπει να έχετε υπόψη σας
Το πιο σημαντικό πράγμα που πρέπει να καταλάβετε είναι ότι η προσθήκη μιας νέας τιμής για μια προεπιλεγμένη παράμετρο PowerShell είναι η αλλαγή της προεπιλεγμένης συμπεριφοράς του cmdlet και όχι η κατάργηση των δυνατοτήτων του cmdlet. Ακόμη και όταν αλλάζετε το cmdlet Get-TimeZone ώστε να εμφανίζει διαθέσιμες ζώνες ώρας αντί να εμφανίζεται η τρέχουσα ζώνη ώρας. Μπορείτε ακόμα να εμφανίσετε τις τρέχουσες πληροφορίες ζώνης ώρας εάν προβάλετε περισσότερα.
Ένα άλλο πράγμα που πρέπει να γνωρίζετε είναι ότι οι προσαρμοσμένες προεπιλεγμένες παράμετροι μπορούν να αφαιρεθούν. Για να καταργήσετε ένα μεμονωμένο στοιχείο, χρησιμοποιήστε την εντολή $PSDefaultParameterValues.Remove , ακολουθούμενη από το όνομα του στοιχείου που θέλετε να καταργήσετε. Για παράδειγμα:
$PSDefaultParameterValues.Remove("Get-TimeZone:ListAvailable")
Αντίθετα, μπορείτε να διαγράψετε ολόκληρο το περιεχόμενο του πίνακα κατακερματισμού χρησιμοποιώντας αυτήν την εντολή:
$PSDefaultParameterValues.Clear();
Μπορείτε να δείτε παραδείγματα και των δύο τεχνικών παρακάτω:

Μπορείτε να διαγράψετε ολόκληρο τον πίνακα κατακερματισμού ή να διαγράψετε μία μόνο καταχώρηση.
Η αλλαγή της προεπιλεγμένης συμπεριφοράς μιας εντολής cmdlet είναι κάτι που δεν κάνετε συχνά, αλλά όταν τη χρειάζεστε, γνωρίζετε ήδη πώς να την αλλάξετε.
Σας εύχομαι επιτυχία!
Δείτε περισσότερα: