Reklama

Kluczowy pierwszy krok w nauka programowania działa z pętlami Absolutne podstawy programowania dla początkujących (część 2)W części 2 naszego absolutnego przewodnika dla programistów dla początkujących 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 ... Czytaj więcej . 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 ty wykonujesz ważną pracę, czytając więcej artykułów na MakeUseOf!

Powershell ForEach Loops: drzwi do zaawansowanej obsługi danych

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

Jak większość współczesnych języków programowania, PowerShell jest zorientowany obiektowo Skąd się wzięło nazwa programowania obiektowego?

Object Oriented to nie tylko przypadkowe 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 programowania i wyjaśniam ... Czytaj więcej . Wszystko w PowerShell jest obiektem, co oznacza, że ​​nawet zmienne mają rozszerzone właściwości i funkcje Polecenia cmdlet programu PowerShell, które poprawią Twoje umiejętności administracyjne w systemie WindowsPowershell to narzędzie wiersza polecenia i język skryptowy równych części. Daje to możliwość zautomatyzowania komputera za pomocą tych samych poleceń, których używasz do administrowania nim. Czytaj więcej . 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 Twoich plików, których nie otworzyłeś w ciągu 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 Jakie są zmienne środowiskowe i jak ich używać? [Windows]Od czasu do czasu poznam małą wskazówkę, która każe mi myśleć „dobrze, gdybym wiedziała, że ​​rok temu zaoszczędziłaby mi to wiele godzin”. Żywo pamiętam, jak się uczyć ... Czytaj więcej $ 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, przechodząc przez każdą z nich $ 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 Directory. foreach ($ doc w $ oldDocs) {Move-Item -Path $ doc. FullName -Destination "$ ($ ArchiveFolder. Pełna nazwa) \ $ ($ doc. Nazwa) „-Potwierdź $ false. } $ source = $ ArchiveFolder. Pełna nazwa. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Nazwa) .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ą wypełnioną 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 ten dokument 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) {Twoje kroki 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. W takich przypadkach chcesz użyć pętli Do-While Jak działają pętle „do-while” w programowaniu komputerowymPętle są jednym z pierwszych rodzajów sterowania, których nauczysz się podczas programowania. Prawdopodobnie wiesz o pętlach while i for, ale co osiąga pętla do-while? Czytaj więcej . Składnia jest nieco inna.

zrób {Twoje kroki. } while (Instrukcja warunkowa)

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

Zbudujemy szybki skrypt, aby ponownie uruchomić 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 poleceń ponownego uruchomienia, pamiętaj o zastąpieniu go adresem DNS / IP komputera). Następnie utwórz zmienną licznika, ja i ustaw na 0. Następnie masz pętlę Do z funkcją 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. } while ((! (Test-Connection 127.0.0.1-Quu)) -lub $ i -gt 3) if ($ i -gt 3) {Write-Ouput "Zdalna maszyna nie odpowiada, sprawdź." } 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 komputer zdalny nie odpowiada. Jeśli tak nie jest, oznacza to, że ponowne uruchomienie się powiodło.

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.

Pętle Foreach PowerShell

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. 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. Czy automatyzacja twojego domowego zestawu 15 Zaawansowane zadania PowerShell może obsłużyć w systemie Windows 10PowerShell jest podobny do wiersza polecenia, 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. Czytaj więcej lub oszczędzając czas w pracy, pętle pomagają twoim skryptom robić więcej. Łącząc te pętle z obsługa błędów przenosi twoje skrypty poza podstawy Dzięki tym poradom radzisz sobie z błędami programu PowerShell jak szefemObsługa błędów PowerShell składa się z czterech części. Dowiedz się, jak naprawić błędy i więcej w Microsoft PowerShell. Czytaj więcej . 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.

Michael nie używał komputera Mac, kiedy byli skazani na zagładę, ale potrafi pisać w Applescript. Ukończył informatykę i angielski; od jakiegoś czasu pisze o Macu, iOS i grach wideo; i od ponad dekady jest małpą IT dnia, specjalizującą się w skryptach i wirtualizacji.