Mini tutorial jak korzystać z PowerShell’a bez Googla

PowerShell to interfejs oparty na komendach zaprojektowany przez Microsoft. Jego główne zastosowanie to wykonywanie operacji w systemie operacyjnym, na którym działa. Znakomicie nadaje się zatem do automatyzacji zadań. A spotkałem się również z tym, że skrypt PowerShell używany był do Deploy’ów.

Oczywiście główny system na jakim działa to Windows. Jednak jest nowa odmiana PowerShell napisana w .NET Core, którą można uruchomić na Mac i Linux. Kod tego produktu został udostępniony przez Microsoft na licencji open source.

Podstawowe polecenia w PowerShell składają się z dwóch członów Verb-Noun. Pierwszy człon zazwyczaj określa co chcemy zrobić, a drugi – na czym. Bardzo przydatne polecenie, które pomoże zrozumieć działanie komend, nawet bez sprawdzania internetów, to polecenie Get-Help. Swoją drogą to zadziwiające, że prawie nikt nie korzysta z helpa w Windows. 🙂

Polecenie Get-Help bardzo przypomina linuxowego manuala, więc jest to już znana koncepcja pomocy. Komendy przyjmują parametry, których nazwy podajemy po znaku myślnika, a wartość jako następną po spacji. Jeśli nie wiemy jakie parametry i w jakiej kolejności przyjmuje dana komenda, to przyda nam się znana nam już: Get-help.

A co jeśli nie znamy komendy, ale wiemy czego dotyczy ?

Przykład: chciałbym sprawdzić jakie serwisy są wyłączone na aktualnej maszynie. Nie znam komendy, ani jej parametrów. Zaczynam więc od komendy, która wyszuka polecenie. Nazywa się Get-Command. Sprawdzam jakie parametry przyjmuje komenda, wywołując:

Get-Help Get-Command

W wyświetlonym manualu widać, że jako pierwszy komenda przyjmuje parametr – Name. Jeśli znamy kolejność, to możemy pominąć nazwę parametru i od razu użyj jej wartości. W rozpatrywanym przypadku wyszukamy komend, które w nazwie zawierają słowo service, gdyż zakładam, że coś powinienem znaleźć spośród wyświetlonej listy.

Get-Command *service*

Na liście znajduje się komenda Get-Service i po sprawdzeniu Get-Help Get-Service okazuje się, że tego właśnie szukam. Co za szczęście. 😉

Do pełni szczęścia potrzebuję użyć tej komendy, aby wyświetliła mi jedynie usługi, które są zatrzymane. Do tego celu użyję parametru Status, ale potrzebne jest mi jeszcze polecenie, które umożliwi selekcje wyników. Ponownie, nie sięgając do Googla, korzystam z helpa dodając parametr –Examples licząc na to, że przykład podsunie mi odpowiedź. Nie mogąc uwierzyć swojemu szczęściu natykam się na przykład 5, który opisuje dokładnie to, czego szukam z servisami, lecz włączonymi.

Ostatecznie wystarczy zamienić Status na Stopped, aby uzyskać rozwiązanie.

Get-Service | where-object Status -eq "Stopped"

BONUS

Do zapisania wyniku w pliku CSV użyj komendy
 Get-Service | Where-Object Status -eq "Stopped" | Export-Csv ./stop-services.csv 

Jako rekomendację do dalszej nauki i automatyzacji pracy z użyciem PS podam stronę Microsoftu https://aka.ms/pscode, gdzie można znaleźć przykładowe skrypty np. data picker. 🙂

Społeczność skrypt’owców PS skupia się na https://powershell.org/ gdzie jest forum i również można wyszukać ciekawe wątki.

Jako ostatnią rekomendację, ale nie najgorszą, wspomnę o ogromnej bazie skryptów na Github, które to skrypty przeglądając, również można się wiele nauczyć. Na przykład ten skrypt backupu bazy danych https://github.com/sbirdsill/PowerShell-Backup-MSSQL-Databases

By Piort