Podstawy Zbiór wpisów od których warto zacząć przygodę z PowerShell

PowerShell podstawy – wstęp

powershell - podstawy

Windows PowerShell

Windows PowerShell to dojrzały język skryptowy oparty na .Net, którego od początku ogromną zaletą jest obiektowość, ale nie tylko. O tym dlaczego warto poznać PowerShell pisałem chociażby, tutaj – 9 powodów dlaczego warto (dobrze) znać PowerShell

Dlatego nie przedłużając zapraszam, do poznania podstawowych komendy i pojęć związanych z PowerShell, które wg mnie pozwalają na pierwsze kroki w interaktywnej pracy z tym rozwiązaniem.

Continue Reading

By

Read More

9 powodów dlaczego warto (dobrze) znać PowerShell

warto znać powershell

Prawdopodobnie, jeśli jesteś tutaj, to zastanawiasz się, czy warto inwestować swój czas w naukę PowerShell. 

Poniżej 9 punktów, które w mojej opinii przemawiają za tym, że warto.

Continue Reading

By

Read More

🎓Interpretowanie składni poleceń – wszystko co musisz wiedzieć!

Wiele poradników, książek, kursów o PowerShell zaczyna od podstawowych cmdletów takich jak Get-Command i Get-Help. Sam również polecam się z nimi zapoznać, jeśli zaczynasz naukę PowerShell.

Mimo że polecenia realizują inne zadania, to mają jedną wspólną rzecz. Dzięki jednemu i drugiemu poznasz składnie interesujących Cię poleceń.

polecenia PowerShell - interpretacja skladni poleceń
Continue Reading

By

Read More

🎓 Zasoby do nauki PowerShell na 2020 rok

Nowy rok jest zawsze dobrym momentem na nowe wyzwania, postanowienia, nawet jeśli głośno o nich nie mówimy. Jeśli w Twoim celem jest nauka PowerShell lub poszerzenie wiedzy na jego temat to ten post jest dla Ciebie.

Poniżej znajdziesz zebrane zasoby, które pomogą Ci uczyć się PowerShell w 2020 roku.

Continue Reading

By

Read More

Invoke-Command i błąd początkującego (ale nie tylko) 😐

Dzisiaj zacznę nietypowo. Spójrz na poniższy fragment kodu i odpowiedź na pytane. Czy to zadziała?

Jeśli od razu pomyślałeś, „nie ma mowy” to problem z przeniesieniem zmiennych lokalnych do poleceń zdalnych nie jest Ci obcy. Jeśli jednak miałeś wątpliwości (spoko, sporo osób je ma) to zapraszam Cię do wpisu, w którym wyjaśniam, dlaczego nie mogło to zadziałać.

Wszystkiemu winny jest…

Zakres sesji

Z zakresem sesji trzeba się zmierzyć, nie tylko używając Invoke-Command ale również Start-Job.

Lokalny skrypt jest wykonywany w zakresie innej sesji niż blok skryptu wykonany przez Invoke-Command lubStart-Job. Zdefiniowane zmienne $Path i $Desintation istnieją tylko w naszej (lokalnej) sesji. Natomiast w zdalnej po prostu ich nie ma, więc mają wartość $null.

Wykonaj poniższy przykład aby przekonać się, że to napisałem to prawda.

Działa to tak a nie inaczej, ponieważ PowerShell zakłada, że zmienne używane w zdalnych poleceniach zostaną tam zdefiniowane. Czyli PowerShell domyślnie oczekuje czegoś takiego.

Jest to jakieś rozwiązanie, jednak znacznie częściej będziesz chciał przekazać wartości z lokalnego skryptu (sesji) do sesji zdalnej. Co wtedy?

Zobacz 3 podejścia przeniesienia zmiennych lokalnych do poleceń zdalnych.

1. Zmienna automatyczna $args

Wykorzystaj parametr -ArgumentList polecenia Invoke-Command lub Start-Job do przekazania wartości zmiennych. Wartości te trafią (nie zawsze) do automatycznej zmiennej $args, którą wykorzystasz w bloku skryptu.

Zmienna $args jest tablicą, dlatego pierwszą wartość znajdziesz w $args[0], drugą w $args[1] i tak dalej.

2. Blok parametrów

Wykorzystaj w bloku skryptu, blok parametrów tak jak w skrypcie lub funkcji. Określ niezbędne parametry, których wartość następnie przekażesz podobnie jak wyżej, poprzez -ArgumentList.

Jeśli blok skryptu ma zadeklarowane parametry to zmienna automatyczna $args jest pomijana (stąd te nie zawsze), chyba że argumentów w -ArgumentList będzie więcej niż parametrów w bloku param().

3. Modyfikator zakresu `Using:`

Począwszy od PowerShell 3.0, sprawa uproszczono maksymalnie. Wystarczy skorzystać z modyfikatora zakresu Using:<nazwa zmiennej> aby przenieść zmienną lokalną do zdalnego polecenia.

W tym podejściu -ArgumentList jest kompletnie niepotrzebny. Tylko oznaczamy modyfikatorem w bloku skryptu, które zmienne lokalne zostaną użyte w zdalnej sesji.

Podsumowanie

We wpisie wyjaśniłem, dlaczego występuje problem z przeniesienia zmiennych lokalnych do poleceń zdalnych i jak sobie z nim radzić.

Ostatnia sprawa, jeśli nie musisz zapewniać kompatybilności z PowerShell 2.0 to wykorzystuj w pierwszej kolejności modyfikator sesji Using:.

Źródła:

By

Read More

Potok czyli pełna moc możliwości PowerShell

Dzięki „pionowej kresce” w poleceniach, można wykorzystać pełną moc PowerShell. Znak potoku | bo o nim mowa, umożliwia nam łączyć wiele poleceń w potężne jednowierszowe sekwencję.

W ten sposób osiągamy w jednym wierszu to, co zwykle wymagałoby pisania kilku linii w skrypcie. Wszystko to zasługa potoku.

Potok

Potok zapewnia efektywny sposób przekazywania wyników pomiędzy poleceniami. Każdy znak potoku | powoduję próbę wysyła wyniku poprzedniego polecenia do następnego.

Parafrazując, dane wyjściowe pierwszego polecenia trafiają jako dane wejściowe do następnego polecenia, dane drugiego do kolejnego i tak dalej. Jak woda w potoku, wyniki w PowerShell „płyną” z lewej do prawej.

Jeden niuans, nie wszystkie polecenia akceptują przekazane dane z potoku.

Jak sprawdzić?

Najprościej, sięgając do treści pomocy. W tym celu wykonaj polecenie help z parametrem  -Parameter * i zwróć uwagę na Accept pipeline input.

Oprócz informacji, do jakich parametrów możliwe jest przekazanie wartości, również dowiesz się jakiego typu dane oraz jakie metody wiązania są akceptowane.

Metoda ByValue

Metody są dwie, jednak ByValue ma pierwszeństwo. Jej działanie jest proste, polega na przekazaniu całego obiektu (wszystkich właściwości, metod, aliasów) do kolejnego polecenia.

Zobacz na przykładzie. Get-Process zwraca obiekt typu System.Diagnostics.Process. który jest w całości przekazywany do polecenia Stop-Process. Nastąpi to dopiero po tym jak powłoka PowerShell sprawdzi, czy jakikolwiek parametr polecenie akceptuję meotdę ByValue i przyjmuję obiekt takiego typ.

potok ByValue jak działa pipeline

Jeśli wszystkie warunki są spełnione, wykonywane jest polecenie Stop-Process, jeśli nie to powłoka sprawdza drugą metode.

Metoda ByPropertyName

ByValue opiera się na typie obiektu, natomiast ByPropertyName tylko na nazwie właściwości. Oczywiście wcześniej sprawdzając, czy parametr akceptuję dane z potoku.

W przeciwieństwie do ByValue, która akceptuję jedno wiązanie, ta metoda pozwala na wiązanie wielu pasujących do siebie właściwości i parametrów.

potok ByPropertyName jak działa pipeline

W przypadku Get-Item -Path . | Stop-Process typ obiektu nie zgadza się z typem parametru InputObject. Dlatego wystąpiło wiązanie po nazwie właściwości Name i wykonanie polecenia Stop-Process.

Takie polecanie nie ma większego sensu, ale jako przykład jest idealne 🙂

Dla ciekawskich

Jeśli chciałbyś podejrzeć co dokładnie PowerShell wykonuję w momencie użycia znaku potoku z pomocą przychodzi polecenie Trace-Command.

Podsumowanie

Wpis miał przybliżyć jak PowerShell podejmuję decyzję, kiedy wyjście jednego polecenie może zostać przekazane do kolejnego.

Na początku stosowania potoku może być nieintuicyjne, ale przy odrobinie praktyki przekonasz się, że łączenie poleceń oszczędza czas, a także zwiększa efektywność skryptów.

By

Read More

Lista 10 komend PowerShell, których używam najczęściej

Dzisiaj mam dla Ciebie listę 10 najczęściej używanych komend PowerShell. Jest to lista wyciągnięta z wszystkich dotychczas napisanych przeze mnie skryptów, a już się tego trochę nazbierało.

Jak taką statystykę wykonać, znajdziesz na końcu. Wracając do tematu, poniżej 10 moich podstawowych komend PowerShell.

1. New-Object

Polecenie wykorzystaj do utworzenia własnego obiektu lub obiektu .NET.

2. Write-Verbose

Przekażesz za jego pomocą tekst do strumienia pełnych komunikatów. Polecenia Write-Verbose w skryptach nierozłącznie używaj wraz z atrybutem cmdletbinding().

Dopiero przełącznik -Verbose spowoduje przekazywanie tych komunikatów do konsoli.

3. Add-Member

Add-Member umożliwia dodawania niestandardowych właściwości i metody do obiektu PowerShell.

4. Select-Object

PoleceniaSelect-Object przede wszystkim wykorzystasz do wyboru właściwości obiektu ale również do utworzenia lub modyfikacji obiektu.

5. Join-Path

Używaj do łączenia ścieżek do plików lub folderów. Zalecane podejście przy budowaniu skryptów multiplatformowych.

6. Where-Object

Poleceniem Where-Object wybierzesz obiekty z zbioru na podstawie oczekiwanych wartości właściwości. Warto wspomnieć, że, od PowerShell 3.0 mamy coś takiego jak Simplified Language Syntax.

7. Add-Content

Za pomocą tego polecenia dodasz treść do określonych elementów, np. plików. Zobacz na wykorzystanie polecenia w przykładzie dla Get-Content.

8. Foreach-Object

Polecenie Foreach-Object umożliwia wykonanie powtarzalnych operacji na każdym obiekcie z zbioru. Dziwie się, że jest tak nisko 😉

9. Out-File

Poleceniem Out-File przekażesz dane wyjściowe do pliku. Tożsame z operatorem przekazania > jednak, gdy będziesz musiał określić dodatkowe parametry użyj nazwy cmdletu.

10. Get-Content

Polecenie Get-Content wykorzystasz do pobrania np. tekstu z pliku. W przypadku plików domyślnie treść jest odczytywana wiersz po wierszu ale nic nie stoi na przeszkodzie aby przełącznikiem -Raw zmienić sposób działania.

Podsumowanie

To była lista 10 najczęściej wykorzystywanych przeze mnie komend PowerShell w skryptach, które napisałem dotychczas. Obecność (co może być zaskoczeniem) takich polecenia jak New-Object, Write-Verbose lub Join-Path wynika z trzymania się dobrych praktyk pisania skryptów w PowerShell. Do których mocno zachęcam.

PS. Chcesz się dowiedzieć, jakie jest Twoje top 10? W tym celu możesz wykorzystać mój skrypt.

By

Read More

× Close