Wie Powershell Foreach, While und andere Schleifen funktionieren

Wie Powershell Foreach, While und andere Schleifen funktionieren

Ein entscheidender erster Schritt beim Erlernen des Programmierens ist die Arbeit mit Schleifen. Zum Glück wächst PowerShell mit Ihren Fähigkeiten weiter.





am besten billig alles in einem drucker

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





Powershell ForEach Loops: Die Tür zu fortschrittlicher Datenverarbeitung

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





Wie die meisten modernen Programmiersprachen ist PowerShell objektorientiert. Alles in PowerShell ist ein Objekt, was bedeutet, dass auch Variablen haben erweiterte Eigenschaften und Funktionen . Diese Eigenschaft ist der Grund, warum Sie Ihre Suchen auf eine Variable setzen können und am Ende ein Array der Ergebnisse erhalten.

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

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



In PowerShell durchlaufen Sie das Array und führen die Aktion für jedes Array mithilfe von ForEach aus. Dadurch sparen Sie mehrere Zeilen Code, was bei längeren Skripten hilfreich ist. Im Folgenden finden Sie beispielsweise ein kleines Skript, das einige Powershell-ForEach-Schleifen verwenden würde. Es erstellt ein ZIP-Archiv all Ihrer Dateien, die Sie 30 Tage lang nicht geöffnet haben.

Erstellen eines Dateiarchivsystems mit ForEach-Schleifen

Lassen Sie uns die Stufen herunterbrechen. Sie nutzen Get-ChildItem um alle Dateien im Ordner Dokumente zu erhalten. Die Umgebungsvariable $env:BENUTZERPROFIL führt das Skript mit dem aktuellen Profil aus. Diese Variable ist portierbarer als ein hartcodierter Pfad. Die Ergebnisse dieser Suche werden der Variablen zugewiesen $ MyDocs . Wir erstellen dann unsere ForEach-Schleife, indem wir sie durchgehen 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 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
}

Innerhalb der Schleife prüfen wir, ob jede Datei LastAccessTime Eigentum ist älter als 30 Tage. Das bekommen wir mit dem Verabredung bekommen Cmdlet und verwenden Sie die AddDays Funktion mit minus dreißig. Wenn dies der Fall ist, fügen wir die Datei zum $myOldDocs Array. Nachdem die Dateisortierung abgeschlossen ist, nehmen wir unser fertiges Array und erstellen eine ZIP-Datei. Dieser Vorgang ist etwas komplizierter, da er ein wenig .NET aufruft. Machen Sie sich keine Sorgen, wenn Sie es nicht ganz verstehen – Sie können den Code von stehlen dieses TechNet-Hilfedokument .

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





While und Do While: Schleifen bei 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 Verfolgen des Aufwärtszählens verwenden, legen Sie diese zuerst fest.

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

Das Problem besteht darin, dass, wenn Sie keinen Zähler verwenden, Ihr Code möglicherweise mindestens einmal ausgeführt werden soll, auch wenn der Test wahr ist. Dies ist bei dem folgenden Beispielskript der Fall. In diesen Fällen möchten Sie also eine Do-While-Schleife verwenden. Die Syntax ist etwas anders.

do{
Your Steps
}while(Conditional Statement)

Diese zu verwenden ist für einen unerfahrenen Programmierer nicht ganz so offensichtlich. Bei der üblichen täglichen Skripterstellung werden Sie möglicherweise nicht so oft auf sie stoßen. Besonders praktisch sind sie, einen behelfsmäßigen Timer zu erstellen, um den Erfolg eines Prozesses zu testen.

So melden Sie sich bei Windows 10 automatisch an

Wir werden ein schnelles Skript erstellen, um einen Remote-Computer neu zu starten und zu warnen, wenn er nicht innerhalb von 15 Minuten wieder hochfährt. In diesem Szenario wird davon ausgegangen, dass es sich um einen Heimserver oder eine andere Maschine handelt, die nicht sehr oft neu gestartet wird. Fühlen Sie sich frei, die Zeit anzupassen, wenn Ihr Computer normalerweise schneller hochfährt.

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

Dieses Skript ist etwas einfacher. Zuerst verwenden Sie die Starte den Computer neu Befehl, um den Remote-Rechner neu zu starten. (Wir haben hier eine Dummy-IP für die Neustartbefehle verwendet, überschreiben Sie diese unbedingt 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, die das Skript für 300 Sekunden (fünf Minuten) anhält. Ein zweiter Befehl fügt dem Zähler eins hinzu.

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'
}

Dann haben wir unsere While-Kriterien. Wir verwenden einen Or-Test, um sicherzustellen, dass ein Fehler eine Warnung generiert. Die Alternative besteht darin, dass das Skript endlos in einer Schleife auf den entfernten Computer wartet. Um die Maschine zu überprüfen, verwenden wir die Testverbindung Cmdlet. Der Einfachheit halber ist dies Ping für PowerShell. Wir fügen den Parameter hinzu -Ruhig was es 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 beträgt.

Sobald 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 er größer als drei ist, gibt das Skript aus, dass der Remote-Computer nicht antwortet. Ist dies nicht der Fall, wird ausgegeben, dass der Neustart erfolgreich war.

Andere Schleifen

In PowerShell stehen zwei weitere Arten von Schleifen zur Verfügung. Sie sind etwas mit den vorherigen beiden Schleifen verwandt, sie werden nur nicht so häufig verwendet. Eine For-Schleife funktioniert ähnlich wie das While-Beispiel. Sie legen alle Ihre Kriterien in der Evaluierung fest und legen dann Ihre Cmdlets fest.

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

Do Until-Schleifen sind wie Do While-Schleifen, Sie ändern einfach die While-Anweisung in Until. Im Beispielskript wäre es das gleiche Verhalten. Es ist eine Stilwahl, aber der Do While ist in anderen Situationen vielseitiger. Wenn Sie sich also nur an einen erinnern, ist Do While nützlicher.

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 Beispiele und andere Tipps für jeden Typ sehen. Diese sollten hilfreich sein, wenn Sie nicht weiterkommen.

Weiter mit dir wachsen

An diesem Punkt verfügen Sie über die meisten Fähigkeiten, um mit dem Erstellen robuster Skripte zu beginnen. Egal, ob Sie Ihr Heim-Rig automatisieren oder bei der Arbeit Zeit sparen, Loops helfen Ihren Skripten, mehr zu tun. Durch die Kombination dieser Schleifen mit Fehlerbehandlung geht Ihre Skripterstellung über die Grundlagen hinaus. Dies öffnet die Tür zu fortgeschritteneren Sprachen.

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

Teilen Teilen Tweet Email Löschen Sie diese Windows-Dateien und -Ordner, um Speicherplatz freizugeben

Müssen Sie Speicherplatz auf Ihrem Windows-Computer freigeben? Hier sind die Windows-Dateien und -Ordner, die sicher gelöscht werden können, um Speicherplatz freizugeben.

Weiter lesen
Verwandte Themen
  • Programmierung
  • Power Shell
  • Skripting
Über den Autor Michael McConnell(44 Artikel veröffentlicht)

Michael benutzte keinen Mac, als sie dem Untergang geweiht waren, aber er kann in Applescript programmieren. Er hat Abschlüsse in Informatik und Englisch; er schreibt seit einiger Zeit über Mac, iOS und Videospiele; und er ist seit über einem Jahrzehnt ein IT-Affe am Tag und hat sich auf Skripting und Virtualisierung spezialisiert.

Wie schließe ich die Wii an Smart-TV an?
Mehr von Michael McConnell

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich zu abonnieren