Wie Powershell Foreach, While und andere Loops funktionieren

Wie Powershell Foreach, While und andere Loops funktionieren / Programmierung

Ein entscheidender erster Schritt beim Erlernen des Programmierens ist das Arbeiten mit Schleifen. Die absoluten Grundlagen der Programmierung für Anfänger (Teil 2) Die absoluten Grundlagen der Programmierung für Anfänger (Teil 2) In Teil 2 unseres absoluten Anfängerleitfadens zum Programmieren werde ich über die Grundlagen von Funktionen, Rückgabewerten, Schleifen und Bedingungen. Vergewissern Sie sich, dass Sie Teil 1 gelesen haben, bevor Sie sich mit diesem Problem befassen. Dort… Zum Glück wächst PowerShell weiterhin mit Ihren Fähigkeiten.

Sie können die vorhandenen Befehle, die Sie täglich verwenden, in Schleifen einrahmen, um Zeit und Aufwand zu sparen. Ihre Skripte erledigen die Arbeit, während Sie die wichtigen Artikel lesen, um mehr Artikel über MakeUseOf zu lesen!

Powershell ForEach-Loops: Die Tür zum erweiterten Datenhandling

ForEach ist der Alias ​​für das ForEach-Objekt. (Ein Alias ​​ist nur eine Verknüpfung für einen Befehl in PowerShell.) Dies ist ein guter Zeitpunkt, um über die Art und Weise zu sprechen, in der PowerShell Daten behandelt.

Wie die meisten modernen Programmiersprachen ist PowerShell objektorientiert. Woher stammt die "objektorientierte" Programmierung? Woher erhielt die "objektorientierte" Programmierung ihren Namen? Objektorientiert ist nicht nur ein zufälliges Schlagwort, das Sie in Programmierkreisen hören. Es gibt einen Grund für den Namen - aber was? Begleiten Sie mich, um einige der Grundlagen der Programmierkonzepte zu erforschen und erklären Sie… Lesen Sie mehr. Alles in PowerShell ist ein Objekt. Dies bedeutet, dass selbst Variablen erweiterte Eigenschaften und Funktionen haben. Powershell-Cmdlets, die Ihre Windows-Administratorfähigkeiten verbessern. Powershell-Cmdlets, die Ihre Windows-Administratorfähigkeiten verbessern. Powershell ist zu gleichen Teilen Befehlszeilentool und Skriptsprache. Sie haben die Möglichkeit, Ihren Computer mit denselben Befehlen zu automatisieren, die Sie zur Verwaltung des Computers verwenden. Weiterlesen . Diese Eigenschaft ist der Grund, warum Sie Ihre Suchvorgänge auf eine Variable setzen und ein Ergebnis-Array erhalten können.

$ yourVar = Get-ChildItem * foreach ($ -Datei in $ yourVar) Ihre Schritte 

In einigen Sprachen wäre die Verarbeitung dieses Arrays ein mehrstufiger Prozess. Zuerst die Länge und dann jeden Schritt hochzählen.

In PowerShell führen Sie das Array schrittweise aus und führen die Aktion für jedes Array mithilfe von ForEach aus. Dies erspart Ihnen mehrere Zeilen Code, was hilfreich ist, wenn Sie ein längeres Skript haben. Das folgende Beispiel ist ein kleines Skript, das ein paar Powershell ForEach-Schleifen verwendet. Es erstellt ein ZIP-Archiv aller Ihrer Dateien, die Sie seit 30 Tagen nicht geöffnet haben.

Erstellen eines Dateiarchivierungssystems mit ForEach-Schleifen

Brechen wir die Schritte ab. Sie verwenden Get-ChildItem um alle Dateien im Ordner Dokumente abzurufen. Die Umgebungsvariable Was sind Umgebungsvariablen und wie kann ich sie verwenden? [Windows] Was sind Umgebungsvariablen und wie kann ich sie verwenden? [Windows] Von Zeit zu Zeit lerne ich einen kleinen Tipp, der mich zum Nachdenken bringt: "Wenn ich wüsste, dass es vor einem Jahr gewesen wäre, hätte es mir Stunden gespart". Ich erinnere mich lebhaft, wie ich… Lesen Sie mehr $ env: USERPROFILE Führt das Skript mit dem aktuellen Profil aus. Diese Variable ist portabler als ein fest codierter Pfad. Die Ergebnisse dieser Suche werden der Variablen zugewiesen $ MyDocs. Wir erstellen dann unsere ForEach-Schleife, indem wir sie schrittweise durchlaufen lassen $ Doc in $ 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-Verzeichnis foreach ($ doc in $ oldDocs) Move-Item -Pfad $ 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 (Testpfad $ destination) Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false 

Innerhalb der Schleife überprüfen wir, ob jede Datei vorhanden ist LastAccessTime Eigenschaft ist älter als 30 Tage. Wir bekommen das mit der Verabredung bekommen Cmdlet und Verwenden der AddDays Funktion mit negativen dreißig. Wenn ja, fügen wir die Datei dem hinzu $ myOldDocs Array. Nachdem die Dateisortierung abgeschlossen ist, nehmen wir unser fertiges Array und erstellen eine ZIP-Datei. Dieser Vorgang ist etwas komplizierter, da etwas .NET aufgerufen wird. Machen Sie sich keine Sorgen, wenn Sie es nicht ganz verstehen - Sie können den Code aus diesem TechNet-Hilfedokument stehlen.

Um zu beschreiben, was hier passiert, verschieben wir alle unsere alten Dateien in ein neues Verzeichnis, das nach dem heutigen Datum benannt ist und älter als 30 Tage ist. Sobald dieser Ordner erstellt wurde, müssen wir das ZIP-Archiv mit demselben Namen erstellen. Wir werden testen, ob das Archiv erfolgreich war und die ZIP-Datei vorhanden ist, und dann den neuen Ordner löschen. Legen Sie diese Aufgabe als geplante Aufgabe fest, die einmal im Monat ausgeführt wird. Sie sparen sich etwas Platz und halten den Ordner Dokumente sauber.

While und Do While: Schleifen unter Bedingung

Wenn Sie eine Schleife nur ausführen möchten, wenn eine bestimmte Bedingung erfüllt ist, verwenden Sie eine While-Schleife. Wenn Sie eine Variable zum Nachverfolgen der Zählung verwenden, legen Sie diese zuerst fest.

i = 0 während (i<10) Your Steps i+=1  

Das Problem ist, dass Sie, wenn Sie keinen Zähler verwenden, möchten, dass Ihr Code mindestens einmal ausgeführt wird, auch wenn der Test erfüllt ist. Dies ist der Fall mit dem folgenden Beispielskript. In diesen Fällen möchten Sie eine Do-While-Schleife verwenden. Funktionsweise von Do-While-Schleifen in der Computerprogrammierung Funktionsweise von Do-While-Schleifen in der Computerprogrammierung Schleifen sind eine der ersten Steuerungstypen, die Sie beim Programmieren lernen. Sie wissen wahrscheinlich, wann und für Schleifen, aber was leistet eine do-while-Schleife? Weiterlesen . Die Syntax ist etwas anders.

do Your Steps while (Bedingte Anweisung) 

Die Verwendung dieser Funktionen ist für einen unerfahrenen Programmierer nicht ganz so offensichtlich. Bei typischen Skripten von Tag zu Tag begegnen Sie ihnen möglicherweise nicht so oft. Wo sie sich als besonders nützlich erweisen, ist das Erstellen eines provisorischen Timers, um den Erfolg eines Prozesses zu testen.

Wir werden ein schnelles Skript erstellen, um einen Remote-Computer neu zu starten und zu warnen, wenn er nicht innerhalb von 15 Minuten wieder auftaucht. In diesem Szenario wird davon ausgegangen, dass es sich um einen Heimserver oder einen anderen Computer handelt, der nicht häufig neu gestartet wird. Fühlen Sie sich frei, die Zeit einzustellen, wenn Ihr Computer normalerweise schneller läuft.

Neustart und Überprüfung: Verwenden einer Do-While-Schleife

Dieses Skript ist etwas einfacher. Zuerst verwenden Sie die Starte den Computer neu Befehl zum Neustarten des Remote-Computers. (Wir haben hier eine Dummy-IP für die Neustartbefehle verwendet. Überschreiben Sie diese mit der DNS / IP Ihres Computers.) Erstellen Sie dann die Zählervariable, ich und setzen Sie es auf 0. Als Nächstes haben Sie Ihre Do-Schleife mit Start-Sleep, um das Skript für 300 Sekunden (fünf Minuten) zu stoppen. Ein zweiter Befehl fügt dem Zähler eine hinzu.

Restart-Computer -Computername 127.0.0.1 i = 0 do Start-Sleep-Sekunden 300 $ i + = 1 while ((! (Testverbindung 127.0.0.1 -Quiet)) -oder $ i -gt 3) if ( $ i -gt 3) Write-Ouput "Remote-Computer antwortet nicht, bitte überprüfen."  else Write-Output "Neustart erfolgreich" 

Dann haben wir unsere While-Kriterien. Wir verwenden einen OR-Test, um sicherzustellen, dass ein Fehler eine Warnung generiert. Die Alternative ist, dass das Skript endlos auf die Remote-Maschine wartet. Zur Überprüfung der Maschine verwenden wir die Testverbindung Cmdlet. Zur Vereinfachung ist dies Ping für PowerShell. Wir fügen den Parameter hinzu -Ruhig was zwingt, True oder False zurückzugeben, anstatt die Ergebnisse der Pakete. Der zweite Teil der OR-Anweisung prüft, ob der Zähler mehr als drei ist.

Wenn die Schleife abgeschlossen ist, möchten wir die Ausgabe erstellen. Das bedeutet, dass wir unseren Zähler überprüfen müssen. Dies ist eine schnelle if / else-Anweisung. Wenn es größer als drei ist, gibt das Skript aus, dass der Remote-Computer nicht antwortet. Ist dies nicht der Fall, wird angezeigt, dass der Neustart erfolgreich war.

Andere Loops

In PowerShell sind zwei weitere Arten von Schleifen verfügbar. Sie haben etwas mit den beiden vorherigen Loops zu tun, sie werden einfach nicht so häufig verwendet. Eine For-Schleife funktioniert ähnlich wie das While-Beispiel. Sie legen alle Ihre Kriterien in der Auswertung fest und legen dann Ihre Cmdlets fest.

für ($ i = 0; $ i -lt 10; $ i ++) Ihre Schritte 

Do-Bis-Schleifen sind wie Do-Loops. Sie ändern einfach die While-Anweisung in Bis. Im Beispielskript entspricht dies dem Verhalten. Es ist eine Stilauswahl, aber das Do While ist in anderen Situationen vielseitiger. Wenn Sie sich also nur an eines erinnern, ist Do While sinnvoller.

PowerShell bietet auch Hilfe für jede dieser Schleifen. Sie können die Hilfe erhalten, indem Sie hinzufügen Über vor dem Schleifennamen in Get-Help. Sie können dann für jeden Typ Beispiele und andere Tipps anzeigen. Diese sollten hilfreich sein, wenn Sie nicht weiterkommen.

Mit Ihnen weiter wachsen

Zu diesem Zeitpunkt verfügen Sie über die meisten Fähigkeiten, um robuste Skripts zu erstellen. Ob die Automatisierung Ihres Heim-Rig 15 15 Erweiterte Aufgaben PowerShell kann in Windows 10 verarbeitet werden 15 15 Erweiterte Aufgaben PowerShell kann in Windows 10 behandelt werden PowerShell ähnelt der Eingabeaufforderung, ist jedoch besser geeignet. Es ist ein leistungsfähiges Systemverwaltungswerkzeug. Wir haben 15 einfache und komplexe Aufgaben zusammengestellt, die von der Magie der PowerShell profitieren. Lesen Sie mehr oder sparen Sie Zeit bei der Arbeit. Loops helfen Ihren Skripten dabei, mehr zu erreichen. Durch das Kombinieren dieser Schleifen mit Fehlerbehandlung wird das Skripting über die Grundlagen hinaus behandelt. Behandeln von PowerShell-Fehlern wie ein Boss mit diesen Tipps Behandeln von PowerShell-Fehlern wie ein Boss mit diesen Tipps Die PowerShell-Fehlerbehandlung umfasst vier Teile: den Parameter Error Action (Try Action), Try / Catch-Blöcke Fehlervariable-Parameter und Protokollierung. Lerne, wie man sie alle macht. Weiterlesen . Dies öffnet die Tür für fortgeschrittenere Sprachen.

Was ist ein cleveres PowerShell-Skript, das Sie mithilfe von Schleifen erstellt haben? Teilen Sie es uns in den Kommentaren mit.

Erfahren Sie mehr über: PowerShell, Scripting.