Programowanie

Skrypty w PowerShell

Kontynuując temat automatyzacji postanowiłem napisać o skryptach w PowerShellu.

Za każdym razem, gdy muszę wykonać jakąś akcję po raz drugi zastanawiam się czy nie można całego procesu zautomatyzować. Jeśli można to najczęściej przygotowuję skrypt lub makro w programie FastKeys, żebym nie musiał wykonywać tej samej akcji po raz 3 i dalsze. Dzisiaj chciałbym podzielić się z Wami moimi skryptami napisanymi w PowerShellu.

Backup

Skryptów w PowerShellu używam głównie do backupu danych. Co jakiś czas podłączam do komputera zewnętrzny dysk na który zgrywam ręcznie pewne pliki oraz uruchamiam Historię Plików, aby wykonała backup. Dzięki skryptowi  nie musze wykonywać tego ręcznie. Wystarczy uruchomienie skryptu i cała akcja dzieję się za mnie. W tym przypadku wykonuje się cały  łańcuszek. Na początek skrypt sprawdza czy dysk jest podłączony i odblokowany. Jeśli nie to zostaje wyświetlony odpowiedni komunikat. Następnie wykonują się wszyskie akcje związane z backupem wrażliwych danych.  Do tego używam jednej funkcji: Copy-Item. Kopiuje ona wybrane pliki i/lub katalogi do odpowiedniej lokalizacji.  Najpierw podajemy do niej lokalizację wyjściową, a następnie docelową, np..:

Copy-Item C:\source\* E:\destination -Recurse -force

Lokalizacja na dysku C jest lokalizacją źródłową. Zastanawiać może znak * na końcu ścieżki. Oznacza on, że komenda ma przekopiować całe drzewo plików i podfolderów wraz z zawartością. Gdyby jej nie było przekopiowane zostałyby tylko pliki znajdujące się bezpośrednio w lokalizacji C:\source.
Ostatnia opcja, której używam to -Recurse -force. Powoduje ona nadpisanie już istniejących plików. Robię to dlatego, ze na dysku przenośnym chcę mieć zawsze aktualne dane a nie ich tysiące kopii.

Historia plików

Jako backup dokumentów i innych plików używam windowsowej Historii plików. Ją też uruchamiałem za każdym razem, gdy podłączałem dysk zewnętrzny. Teraz już nie musze tego robić. Robi to za mnie powyższy skrypt w Powershellu za pomocą wywołania funkcji:

FhManageW -backupnow

Ta komenda nie jest jednak podana oficjalnie w żadnej dokumentacji i być może że za czas jakiś od opublikowania tego wpisu przestanie ona działać. Więc za nim wrzucisz ją do skryptu upewnij się, ze działa ona tak jak tego oczekujesz.

Archiwum zip? Proszę bardzo

Kolejną akcją którą wykonuję regularnie jest pakowanie wszystkich projektów na koniec każdego semestru studiów do archiwum zip i zgrywanie tego pliku na dysk zewnętrzny. W tym skrypcie oprócz uruchomienia na wejściu podać muszę parametr – liczbę reprezentującą kończący się semestr. Jak przekazać parametr przy uruchomieniu skryptu? Robimy to tak: nazwa_skryptu.ps1 -parametr 1. Teraz pojawia się pytanie jak odebrać wartość parametru w kodzie skryptu?


param([string] $sem)

Na początku wpisujemy nawę funkcji realizującej „odbiór” parametru, czyli param(). Jako parametr funkcja ta przyjmuje typ oraz nazwę parametru poprzedzoną nazkiem $. W tym przypadku typ to string, natomiast nazwa to sem. Jednak najważniejszą komendą w tym skrypcie jest ta kompresująca wybrane pliki. Jej składnia w moim skrypcie wygląda tak:

Compress-Archive -Path C:\dev\studia\*  -CompressionLevel Optimal -DestinationPath C:\dev\Studia\"Projekty "$sem" sem".zip

Teraz wyjaśnię co oznacza każdy z przełączników:

  • -Path Po tym przełączniku podajemy ścieżkę jaką chcemy skompreować. Aby uwzględnić nie tylko pliki ale też pod foldery z danej ścieżki należy dodać na jej końcu symbol *(tak jak jest to zrobione w powyższym kodzie).
  • -CompressionLevel Jak nazwa wskazuje jest to poziom kompresji plików. Są 3 takie poziomy: Optimal, NoCompression, Fastest. Jeżeli chciałbyś wiedzieć więcej o możliwościach tej funkcji odsyłam do oficjalnej dokumentacji na MSDN.
  • -DestinationPath Tutaj również nazwa wskazuje na znaczenie tego argumentu. Jest to miejsce docelowe umieszczenia archiwum wraz z jego nazwą i rozszerzeniem.

Myślę, że tyle wystarczy jak na ten wpis. W kolejnym poruszę kwestię automatyzacji setupu nowego systemu. Tą czynność również zautomatyzowałem z za pomocą Powershella.

Używasz skryptów, lub programów do automatyzacji powtarzających się zadań? Nie zapomnij podzielić się nimi w komentarzu!

2 Comments

  1. Super, że masz takie podejście. Też bardzo lubię korzystać ze skryptów i choć do basha jest znacznie więcej przykładów i materiałów, to na Windowsie zdecydowanie lepiej sprawdza się PowerShell. Dla mnie takim świetnym przykładem możliwości integracji Powershella jest masowy eksport dokumentów Worda do pdfów 🙂

Zostaw odpowiedź

Twój adres email nie zostanie upubliczniony.* Pola wymagane *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.