Jak działa Powershell Foreach, While i Other Loops

  • Gabriel Brooks
  • 0
  • 3703
  • 64
Reklama

Najważniejszym pierwszym krokiem w nauce programowania jest praca z pętlami Absolutne podstawy programowania dla początkujących (część 2) Absolutne podstawy programowania dla początkujących (część 2) W części 2 naszego absolutnego przewodnika po programowaniu, omówię podstawy funkcji, zwracane wartości, pętle i warunki warunkowe. Upewnij się, że przeczytałeś część 1 przed rozwiązaniem tego problemu, w którym wyjaśniłem… Na szczęście PowerShell rozwija się wraz ze swoimi umiejętnościami.

Możesz oprawić istniejące polecenia, których używasz codziennie w pętlach, aby zaoszczędzić czas i wysiłek. Twoje skrypty wykonują ciężkie prace, podczas gdy wykonujesz ważną pracę, czytając więcej artykułów na MakeUseOf!

Powershell ForEach Loops: drzwi do zaawansowanej obsługi danych

ForEach to alias dla obiektu ForEach. (Alias ​​to tylko skrót do polecenia w PowerShell.) To dobry moment, aby porozmawiać o tym, jak PowerShell obsługuje dane.

Podobnie jak większość współczesnych języków programowania, PowerShell jest zorientowany obiektowo. Skąd się wzięło nazwanie programowania obiektowego? Skąd się wzięło nazwa programowania obiektowego? Object Oriented to nie tylko przypadkowe modne hasło, które słyszysz w kręgach programistycznych. Nazwa ma powód - ale co? Dołącz do mnie, gdy będę eksplorować niektóre podstawy koncepcji programistycznych i wyjaśniam…. Wszystko w programie PowerShell jest obiektem, co oznacza, że ​​nawet zmienne mają rozszerzone właściwości i funkcje Polecenia cmdlet programu PowerShell, które poprawią umiejętności administratora Windows Polecenia cmdlet programu PowerShell, które poprawią umiejętności administratora systemu Windows PowerShell to narzędzie wiersza polecenia i język skryptowy do równych części. Daje to możliwość zautomatyzowania komputera za pomocą tych samych poleceń, których używasz do administrowania nim. . Ta właściwość jest powodem, dla którego możesz ustawić wyszukiwanie na zmienną i otrzymać tablicę wyników.

$ yourVar = Get-ChildItem * foreach ($ plik w $ yourVar) Twoje kroki 

W niektórych językach przetwarzanie tej tablicy byłoby procesem wieloetapowym. Najpierw zdobądź długość, a następnie zliczaj każdy krok.

W programie PowerShell przechodzisz przez tablicę i wykonujesz akcję na każdym z nich za pomocą ForEach. Oszczędza to kilka linii kodu, co jest pomocne, jeśli masz dłuższy skrypt. Na przykład poniżej znajduje się mały skrypt, który użyłby kilku pętli Powershell ForEach. Tworzy archiwum ZIP wszystkich plików, które nie zostały otwarte przez 30 dni.

Budowanie systemu archiwizacji plików za pomocą pętli ForEach

Przełammy kroki. Używasz Get-ChildItem aby uzyskać wszystkie pliki w folderze Dokumenty. Zmienna środowiskowa Czym są zmienne środowiskowe i jak ich używać? [Windows] Jakie są zmienne środowiskowe i jak ich używać? [Windows] Co jakiś czas nauczę się małej wskazówki, która każe mi myśleć „no cóż, gdybym wiedziała, że ​​rok temu zaoszczędziłaby mi to wiele godzin”. Żywo pamiętam, jak się uczyć… $ env: USERPROFILE uruchamia skrypt przy użyciu bieżącego profilu. Ta zmienna jest bardziej przenośna niż ścieżka zakodowana na stałe. Wyniki tego wyszukiwania są przypisywane do zmiennej $ MyDocs. Następnie tworzymy naszą pętlę ForEach, wykonując ją krok po kroku $ Doc w $ MyDocs.

$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurse foreach ($ doc w $ MyDocs) if ($ doc.LastAccessTime -lt $ (Get-Date) .addDays (-30)) $ oldDocs + = $ doc $ ArchiveFolder = Nowa pozycja -Path "$ ($ env: USERPROFILE) \ Documents \ $ ((Get-Date -Format MMddyy) .toString ()) „-ItemType Katalog foreach ($ doc w $ oldDocs) Przenieś element -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 (ścieżka testowa $ destination) Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false 

Wewnątrz pętli sprawdzamy, czy każdy plik jest LastAccessTime nieruchomość jest starsza niż 30 dni. Dostajemy to z Get-Date polecenia cmdlet i za pomocą AddDays funkcja z wartością ujemną trzydzieści. Jeśli tak, dodajemy plik do pliku $ myOldDocs szyk. Po zakończeniu sortowania plików bierzemy naszą kompletną tablicę i tworzymy plik zip. Ten proces jest nieco bardziej skomplikowany, ponieważ wymaga wywołania odrobiny platformy .NET. Nie martw się, jeśli go nie rozumiesz - możesz ukraść kod z tego dokumentu pomocy TechNet.

Aby rozbić to, co się tutaj dzieje: Przeniesiemy wszystkie nasze stare pliki do nowego katalogu o nazwie na dzisiejszą datę na okres dłuższy niż 30 dni. Po skompilowaniu tego folderu musimy utworzyć archiwum ZIP o tej samej nazwie. Przetestujemy, aby upewnić się, że archiwum się powiodło i plik .ZIP tam jest, a następnie usuń nowy folder. Ustaw to jako zaplanowane zadanie, które będzie uruchamiane raz w miesiącu. Zaoszczędzisz sobie trochę miejsca i utrzymasz folder Dokumenty w czystości.

While and Do While: Pętle pod warunkiem

Jeśli chcesz uruchomić pętlę tylko wtedy, gdy spełniony jest określony warunek, użyj pętli While. Jeśli używasz zmiennej do śledzenia zliczania, ustaw ją najpierw.

i = 0, podczas gdy (i<10) Your Steps i+=1  

Problem polega na tym, że jeśli nie używasz licznika, możesz chcieć uruchomić kod przynajmniej raz, nawet jeśli test jest prawdziwy. Tak jest w przypadku przykładowego skryptu poniżej. Tak więc w takich przypadkach chcesz użyć pętli „Do-While”. Jak „Do-While” działa w programowaniu komputerowym? Jak? Prawdopodobnie wiesz o pętlach while i for, ale co osiąga pętla do-while? . Składnia jest nieco inna.

do Your Steps while (Warunkowe oświadczenie) 

Korzystanie z nich nie jest tak oczywiste dla początkującego programisty. Wykonując typowe codzienne skrypty, możesz nie spotykać się z nimi tak często. Szczególnie przydają się im prowizoryczny zegar do testowania powodzenia procesu.

Zamierzamy zbudować szybki skrypt, aby zrestartować komputer zdalny i ostrzec go, jeśli nie wróci w ciągu 15 minut. W tym scenariuszu założono, że jest to serwer domowy lub inna maszyna, która nie uruchamia się zbyt często. Dostosuj czas, jeśli komputer zwykle pojawia się szybciej.

Uruchom ponownie i sprawdź: za pomocą pętli „do-while”

Ten skrypt jest nieco prostszy. Najpierw korzystasz z Restart komputera polecenie, aby ponownie uruchomić komputer zdalny. (Użyliśmy tutaj fałszywego adresu IP do komend ponownego uruchomienia, pamiętaj o zastąpieniu go adresem DNS / IP komputera). Następnie utwórz zmienną licznika, ja i ustaw go na 0. Następnie masz pętlę Do z Start-Sleep zatrzymującą skrypt na 300 sekund (pięć minut). Drugie polecenie dodaje je do licznika.

Uruchom ponownie komputer -Nazwa komputera 127.0.0.1 i = 0 do Start-uśpienie -sekundy 300 $ i + = 1 podczas gdy ((! (Test-Połączenie 127.0.0.1 -Cicho)) -lub $ i -gt 3) if ( $ i -gt 3) Write-Ouput "Zdalne urządzenie nie odpowiada, proszę sprawdzić."  else Zapis-wyjście „Uruchomienie powiodło się” 

Następnie mamy nasze kryteria While. Używamy testu Or, aby upewnić się, że awaria generuje alert. Alternatywą jest zapętlanie skryptu bez końca czekające na zdalną maszynę. Aby sprawdzić maszynę, używamy Połączenie testowe cmdlet. Dla uproszczenia jest to Ping for PowerShell. Dodajemy parametr -Cichy co zmusza go do zwrócenia wartości Prawda lub Fałsz zamiast wyników pakietów. Druga część instrukcji Or sprawdza, czy licznik jest większy niż trzy.

Po zakończeniu pętli chcemy utworzyć wynik. Oznacza to, że musimy sprawdzić nasz licznik. Jest to szybka instrukcja if / else. Jeśli jest większa niż trzy, skrypt wyświetla odpowiedź, że maszyna zdalna nie odpowiada. Jeśli tak nie jest, oznacza to, że ponowne uruchomienie zakończyło się powodzeniem.

Inne pętle

Istnieją dwa inne rodzaje pętli dostępnych w PowerShell. Są one nieco związane z poprzednimi dwiema pętlami, po prostu nie są tak często używane. Pętla For działa podobnie do przykładu While. Ustawiasz wszystkie kryteria w ocenie, a następnie ustawiasz polecenia cmdlet.

for ($ i = 0; $ i -lt 10; $ i ++) Twoje kroki 

Pętle Do Unt są podobne do pętli Do While, wystarczy zmienić instrukcję While na Until. W przykładowym skrypcie byłoby to takie samo, jeśli chodzi o zachowanie. Jest to wybór stylu, ale Do While jest bardziej wszechstronny w innych sytuacjach. Więc jeśli pamiętasz tylko jedno, Do Do jest bardziej przydatne.

PowerShell ma również pomoc dla każdej z tych pętli. Możesz uzyskać pomoc, dodając o przed nazwą pętli w Get-Help. Następnie możesz zobaczyć przykłady i inne wskazówki dla każdego typu. Te powinny być pomocne, jeśli utkniesz.

Ciągle rośnie wraz z Tobą

W tym momencie masz większość umiejętności, aby zacząć budować solidne skrypty. Niezależnie od tego, czy automatyzacja domowego systemu 15 Zaawansowane zadania PowerShell może obsłużyć w Windows 10 15 Zaawansowane zadania PowerShell może obsłużyć w Windows 10 PowerShell jest podobny do wiersza poleceń, ale lepszy. To potężne narzędzie do administrowania systemem. Zebraliśmy 15 zadań, niektóre proste, niektóre złożone, które korzystają z magii PowerShell. lub oszczędzając czas w pracy, pętle pomagają twoim skryptom robić więcej. Połączenie tych pętli z obsługą błędów przenosi skrypty poza podstawy Obsługa błędów PowerShell jak szef dzięki tym wskazówkom Obsługa błędów PowerShell jak szef dzięki tym wskazówkom Obsługa błędów PowerShell składa się z czterech części: parametr Działanie błędu, bloki Try / Catch, Parametr zmiennej błędu i rejestrowanie. Dowiedz się, jak to wszystko zrobić. . Otwiera to drzwi do bardziej zaawansowanych języków.

Co to jest sprytny skrypt PowerShell utworzony za pomocą pętli? Udostępnij to nam w komentarzach.




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.