Πώς λειτουργούν τα Powershell Foreach, while και Other Loops

Πώς λειτουργούν τα Powershell Foreach, while και Other Loops

Ένα κρίσιμο πρώτο βήμα στην εκμάθηση προγραμματισμού είναι η εργασία με βρόχους. Ευτυχώς, το PowerShell συνεχίζει να αναπτύσσεται με τις ικανότητές σας.





η ιδιωτικότητα και η ασφάλεια δεν παρακολουθούνται

Μπορείτε να πλαισιώσετε τις υπάρχουσες εντολές που χρησιμοποιείτε καθημερινά μέσα σε βρόχους για να εξοικονομήσετε χρόνο και προσπάθεια. Τα σενάρια σας ανεβάζουν τα βάρη ενώ εσείς κάνετε τη σημαντική δουλειά για να διαβάσετε περισσότερα άρθρα στο MakeUseOf!





Powershell ForEach Loops: The Door to Advanced Handling Data

Το ForEach είναι το ψευδώνυμο για το αντικείμενο ForEach. (Το ψευδώνυμο είναι απλώς μια συντόμευση για μια εντολή στο PowerShell.) Αυτή είναι μια καλή στιγμή για να μιλήσουμε για τον τρόπο με τον οποίο το PowerShell χειρίζεται τα δεδομένα.





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

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

Σε ορισμένες γλώσσες, η επεξεργασία αυτού του πίνακα θα ήταν μια διαδικασία πολλαπλών βημάτων. Πρώτα, πάρτε το μήκος και μετά μετρήστε κάθε βήμα.



Στο PowerShell, περνάτε μέσα από τον πίνακα και εκτελείτε την ενέργεια σε καθένα χρησιμοποιώντας το ForEach. Αυτό σας εξοικονομεί αρκετές γραμμές κώδικα, κάτι που είναι χρήσιμο εάν έχετε μεγαλύτερο σενάριο. Για παράδειγμα, το παρακάτω είναι ένα μικρό σενάριο που θα χρησιμοποιούσε δύο βρόχους Powershell ForEach. Δημιουργεί ένα αρχείο ZIP όλων των αρχείων σας που δεν έχετε ανοίξει εδώ και 30 ημέρες.

Δημιουργία συστήματος αρχειοθέτησης αρχείων χρησιμοποιώντας βρόχους ForEach

Ας σπάσουμε τα βήματα. Εσυ χρησιμοποιεις Get-ChildItem για να λάβετε όλα τα αρχεία στο φάκελο Έγγραφα. Μεταβλητή περιβάλλοντος $ env: USERPROFILE εκτελεί το σενάριο χρησιμοποιώντας το τρέχον προφίλ. Αυτή η μεταβλητή είναι πιο φορητή από μια σκληρή κωδικοποιημένη διαδρομή. Τα αποτελέσματα αυτής της αναζήτησης εκχωρούνται στη μεταβλητή $ MyDocs Το Στη συνέχεια, δημιουργούμε τον βρόχο ForEach, κάνοντάς τον να περάσει από το καθένα $ Doc σε $ MyDocs Το





$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $MyDocs){
if($doc.LastAccessTime -lt $(Get-Date).addDays(-30)){
$oldDocs += $doc
}
}
$ArchiveFolder = New-Item -Path '$($env:USERPROFILE)Documents$((Get-Date -Format MMddyy).toString())' -ItemType Directory
foreach ($doc in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

Μέσα στον βρόχο, ελέγχουμε αν κάθε αρχείο είναι LastAccessTime το ακίνητο είναι παλαιότερο από 30 ημέρες. Αυτό το παίρνουμε με το Get-Date cmdlet και χρησιμοποιώντας το AddDays συνάρτηση με αρνητικό τριάντα. Αν είναι, προσθέτουμε το αρχείο στο $ myOldDocs πίνακας. Αφού ολοκληρωθεί η ταξινόμηση αρχείων, στη συνέχεια παίρνουμε τον ολοκληρωμένο πίνακα και δημιουργούμε ένα αρχείο zip. Αυτή η διαδικασία είναι λίγο πιο περίπλοκη καθώς περιλαμβάνει την επίκληση λίγο .NET. Μην ανησυχείτε αν δεν το καταλαβαίνετε - μπορείτε να κλέψετε τον κώδικα αυτό το έγγραφο βοήθειας TechNet Το

Για να αναλύσουμε τι συμβαίνει εδώ: Θα μεταφέρουμε όλα τα παλιά μας αρχεία σε έναν νέο κατάλογο με το όνομα της σημερινής ημερομηνίας για παλαιότερες από 30 ημέρες. Μόλις δημιουργηθεί αυτός ο φάκελος, πρέπει να δημιουργήσουμε το αρχείο ZIP με το ίδιο όνομα. Θα δοκιμάσουμε για να βεβαιωθούμε ότι το αρχείο πέτυχε και ότι το αρχείο .ZIP είναι εκεί και, στη συνέχεια, διαγράψτε τον νέο φάκελο. Ορίστε αυτό ως προγραμματισμένη εργασία για εκτέλεση μία φορά το μήνα. Θα εξοικονομήσετε λίγο χώρο και θα διατηρήσετε τον φάκελο 'Έγγραφα' καθαρός.





Ενώ και Κάνε Ενώ: Βρόχοι σε κατάσταση

Εάν θέλετε να εκτελέσετε έναν βρόχο μόνο όταν πληρούται μια συγκεκριμένη συνθήκη, χρησιμοποιείτε έναν βρόχο while. Εάν χρησιμοποιείτε μια μεταβλητή για να παρακολουθείτε την καταμέτρηση, ρυθμίστε αυτήν πρώτα.

i=0
while(i<10){
Your Steps
i+=1
}

Το πρόβλημα είναι ότι εάν δεν χρησιμοποιείτε μετρητή, μπορεί να θέλετε ο κώδικάς σας να εκτελείται τουλάχιστον μία φορά ακόμη και αν η δοκιμή είναι αληθής. Αυτό συμβαίνει με το παρακάτω σενάριο παραδείγματος. Έτσι, σε αυτές τις περιπτώσεις, θέλετε να χρησιμοποιήσετε ένα βρόχο Do-while. Η σύνταξη είναι ελαφρώς διαφορετική.

do{
Your Steps
}while(Conditional Statement)

Η χρήση αυτών δεν είναι τόσο προφανής για έναν αρχάριο προγραμματιστή. Κάνοντας τυπικά σενάρια καθημερινά, μπορεί να μην τα συναντάτε τόσο συχνά. Εκεί που είναι ιδιαίτερα χρήσιμο είναι να φτιάξετε ένα αυτοσχέδιο χρονόμετρο για να δοκιμάσετε την επιτυχία μιας διαδικασίας.

πώς να διαγράψετε τον λογαριασμό hotmail 2018

Θα δημιουργήσουμε ένα γρήγορο σενάριο για επανεκκίνηση ενός απομακρυσμένου μηχανήματος και ειδοποίηση εάν δεν επανέλθει μέσα σε 15 λεπτά. Αυτό το σενάριο υποθέτει ότι πρόκειται για οικιακό διακομιστή ή άλλο μηχάνημα που δεν κάνει επανεκκίνηση πολύ συχνά. Μη διστάσετε να ρυθμίσετε την ώρα εάν ο υπολογιστής σας εμφανίζεται συνήθως πιο γρήγορα.

Επανεκκίνηση και έλεγχος: Χρησιμοποιώντας ένα βρόχο Do-while

Αυτό το σενάριο είναι λίγο πιο απλό. Αρχικά, χρησιμοποιείτε το Επανεκκίνηση-Υπολογιστής εντολή για επανεκκίνηση του απομακρυσμένου μηχανήματος. (Χρησιμοποιήσαμε μια εικονική IP εδώ για τις εντολές επανεκκίνησης, φροντίστε να το αντικαταστήσετε με το DNS/IP του υπολογιστή σας). Στη συνέχεια, δημιουργήστε τη μεταβλητή μετρητή, Εγώ και ορίστε το στο 0. Στη συνέχεια, έχετε το βρόχο Do με το Start-Sleep να σταματά το σενάριο για 300 δευτερόλεπτα (πέντε λεπτά). Μια δεύτερη εντολή προσθέτει μία στον μετρητή.

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}

Στη συνέχεια, έχουμε τα κριτήριά μας. Χρησιμοποιούμε μια δοκιμή Or για να διασφαλίσουμε ότι μια αποτυχία δημιουργεί μια ειδοποίηση. Η εναλλακτική λύση είναι το σενάριο να περιμένει ατελείωτα το απομακρυσμένο μηχάνημα. Για να ελέγξουμε για το μηχάνημα, χρησιμοποιούμε το ΔΟΚΙΜΗ ΣΥΝΔΕΣΗΣ cmdlet. Για λόγους απλότητας, αυτό είναι το Ping for PowerShell. Προσθέτουμε την παράμετρο -Ησυχια που το αναγκάζει να επιστρέψει Σωστό ή Λάθος παρά τα αποτελέσματα των πακέτων. Το δεύτερο μέρος της δήλωσης Or ελέγχει εάν ο μετρητής είναι περισσότερος από τρεις.

Μόλις ολοκληρωθεί ο βρόχος, θέλουμε να δημιουργήσουμε την έξοδο. Αυτό σημαίνει ότι πρέπει να ελέγξουμε τον πάγκο μας. Αυτή είναι μια γρήγορη δήλωση εάν/αλλιώς. Εάν είναι μεγαλύτερο από τρία, το σενάριο εξάγει ότι το απομακρυσμένο μηχάνημα δεν αποκρίνεται. Εάν δεν είναι, εξηγεί ότι η επανεκκίνηση ήταν επιτυχής.

Άλλοι βρόχοι

Υπάρχουν δύο άλλοι τύποι βρόχων που διατίθενται στο PowerShell. Σχετίζονται κάπως με τους δύο προηγούμενους βρόχους, απλώς δεν χρησιμοποιούνται τόσο συχνά. Ο βρόχος A λειτουργεί παρόμοια με το παράδειγμα while. Ορίζετε όλα τα κριτήριά σας στην αξιολόγηση και, στη συνέχεια, ορίζετε τα cmdlets σας.

for($i = 0;$i -lt 10;$i++){
Your Steps
}

Οι βρόχοι Do Until μοιάζουν με τους βρόχους Do while, απλώς αλλάζετε τη δήλωση while σε έως. Στο σενάριο παραδείγματος, θα είναι το ίδιο όσον αφορά τη συμπεριφορά. Είναι μια επιλογή στυλ, αλλά το Do While είναι πιο ευέλικτο σε άλλες καταστάσεις. Εάν θυμάστε μόνο ένα, το Do While είναι πιο χρήσιμο.

Το PowerShell έχει βοήθεια και για κάθε έναν από αυτούς τους βρόχους. Μπορείτε να λάβετε τη βοήθεια προσθέτοντας σχετικά με πριν από το όνομα του βρόχου στο Get-Help. Στη συνέχεια, μπορείτε να δείτε παραδείγματα και άλλες συμβουλές για κάθε τύπο. Αυτά πρέπει να είναι χρήσιμα αν κολλήσετε.

Συνεχίζοντας να μεγαλώνεις μαζί σου

Σε αυτό το σημείο, έχετε τις περισσότερες από τις δεξιότητες για να ξεκινήσετε τη δημιουργία ισχυρών σεναρίων. Είτε αυτοματοποιείτε το σπίτι σας είτε εξοικονομείτε χρόνο στη δουλειά, οι βρόχοι βοηθούν τα σενάρια σας να κάνουν περισσότερα. Ο συνδυασμός αυτών των βρόχων με το χειρισμό σφαλμάτων μετακινεί τη δέσμη ενεργειών σας πέρα ​​από τα βασικά. Αυτό ανοίγει την πόρτα σε πιο προηγμένες γλώσσες.

Τι είναι ένα έξυπνο σενάριο PowerShell που έχετε δημιουργήσει χρησιμοποιώντας βρόχους; Μοιραστείτε το μαζί μας στα σχόλια.

Μερίδιο Μερίδιο Τιτίβισμα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Διαγράψτε αυτά τα αρχεία και τους φακέλους των Windows για να ελευθερώσετε χώρο στο δίσκο

Χρειάζεστε εκκαθάριση του χώρου στο δίσκο στον υπολογιστή σας Windows; Ακολουθούν τα αρχεία και οι φάκελοι των Windows που μπορούν να διαγραφούν με ασφάλεια για να ελευθερωθεί χώρος στο δίσκο.

Διαβάστε Επόμενο
Σχετικά θέματα
  • Προγραμματισμός
  • PowerShell
  • Scripting
Σχετικά με τον Συγγραφέα Μάικλ ΜακΚόνελ(Δημοσιεύθηκαν 44 άρθρα)

Ο Michael δεν χρησιμοποίησε Mac όταν ήταν καταδικασμένοι, αλλά μπορεί να κωδικοποιήσει στο Applescript. Έχει πτυχία στην Πληροφορική και στα Αγγλικά. γράφει για Mac, iOS και βιντεοπαιχνίδια εδώ και λίγο καιρό. και είναι ένας μαϊμού ημέρας για πάνω από μια δεκαετία, με ειδίκευση στο σενάριο και την εικονικοποίηση.

πώς να προσθέσετε εφαρμογές στην τηλεόραση του vizio
Περισσότερα από τον Michael McConnell

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή