PowerShell – 5 najczęściej wykorzystywanych komend/skryptów

Bartłomiej Róg, 5 stycznia 2022

PowerShell jest potężnym narzędziem, które znacznie usprawnia i ułatwia pracę administratora. Pozwala na wprowadzenie setek czy tysięcy zmian kilkulinijkowym skryptem. Po przeczytaniu tego artykułu, dowiesz się jakie komendy oraz skrypty PowerShell są wykorzystywane najczęściej. Do każdej komendy podany jest przykład, którego być może użyjesz lub już użyłeś w praktyce.

Instrukcja ForEach lub ForEach-Object

Pętla jest nieoceniona przy działaniach na wielu obiektach. Pozwala na wykonanie akcji na każdym obiekcie z danej kolekcji. Warto dodać, że jeżeli używasz ForEach na początku wiersza, to jest to instrukcja. Umieszczając ją po pipeline, PowerShell traktuje ją jako alias do komendy ForEach-Object. Pokrótce komendy te różnią się szybkością oraz wykorzystaniem pamięci. ForEach jest szybsza, ForEach-Object wykorzystuje mniej zasobów. Brzmi skomplikowanie? W praktyce wygląda to dużo łatwiej. Dla przykładu:

#Skrypt zmieniający domenę w adresach mailowych wszystkich użytkowników w Active Directory.
#W tym przykładzie ForEach traktowana jest jako oddzielna instrukcja.

Import-Module ActiveDirectory
#Import modułu Active directory.
#Jest niezbędny do uruchomienia komend Get-ADUser oraz Set-ADUser.

$ADusers = Get-ADUser -Filter *
#Tworzenie kolekcji $ADusers. Zawiera ona wszystkich użytkowników w AD.


#Pętla foreach dla kolekcji $ADusers. Każdy pojedyńczy obiekt oznaczony jako $ADuser.
foreach ($ADuser in $ADusers)
{
    $email = $ADuser.samaccountname + '@domena.pl'
    #Tworzenie zmiennej $email. 
    #Zmienna zawiera nazwę użytkownika wraz z dodanym przyrostkiem @domena.pl. 
    #np. dla użytkownika jan.kowalski będzie to jan.kowalski@domena.pl.

    Set-ADUser -Identity $ADuser.samaccountname -EmailAddress $email
    #Ustawienie wyżej utworzonej zmiennej jako adres mailowy.

}
#Zawartość pętli wykona się dla każdego użytkownika w kolekcji $ADusers.

oraz

#Skrypt zmieniający domenę w adresach mailowych wszystkich użytkowników w Active Directory.
#W tym przykładzie użyję ForEach-Object.

Import-Module ActiveDirectory
#Import modułu Active directory.
#Jest niezbędny do uruchomienia komend Get-ADUser oraz Set-ADUser.

$ADusers = Get-ADUser -Filter *
#Tworzenie kolekcji $ADusers. Kolekcja zawiera wszystkich użytkowników w AD.

#Przesyłanie zawartości $ADusers do ForEach-Object za pomocą pipeline.
#W tym wypadku do identyfikacji pojedyńczego obiektu w kolekcji użyta jest zmienna $_ zamiast $ADuser.
$ADusers | ForEach-Object{

    $email = $_.samaccountname + '@domena.pl'
    #Tworzenie zmiennej $email. 
    #Zmienna zawiera nazwę użytkownika wraz z dodanym przyrostkiem @domena.pl. 
    #np. dla użytkownika jan.kowalski będzie to jan.kowalski@domena.pl.

    Set-ADUser -Identity $_.samaccountname -EmailAddress $email
    #Ustawienie wyżej utworzonej zmiennej jako adres mailowy.
    
}
#Zawartość pętli wykona się dla każdego użytkownika w kolekcji $ADusers.

Import-Csv / Export-Csv                       

Jak bardzo ograniczony byłby PowerShell bez możliwości zapisu oraz odczytu z pliku? Komendy Import-Csv / Export-Csv są rozwiązaniami do operacji na zewnętrznych danych, których używa się najczęściej. Import-Csv pozwala zaimportować dane z pliku CSV do naszego skryptu. Analogicznie Export-Csv wyeksportuje dane, zapisując je w formacie CSV.

Export-Csv:

#Skrypt eksportujący listę procesów do pliku CSV.

$process = Get-Process
#Tworzenie zmiennej $process.
#Zmienna zawiera listę procesów.

$process | Export-Csv -Path C:\temp\process.csv
#Przekazanie $process za pomocą pipeline | do komedy Export-Csv.
#Komenda Export-Csv zapisuje zmienną $process w lokalizacji C:\temp\ jako plik process.csv.

Import-Csv:

#Skrypt importujący numery telefonów z pliku csv.

Import-Module ActiveDirectory
#Import modułu ActiveDirectory.
#Jest niezbędny do uruchomienia komendy Set-ADUser.


$NumbersList = Import-Csv -Path C:\temp\numbers.csv
#Import pliku numbers.csv, znajdującego się w lokalizacji C:\temp\numbers.csv do $NumbersList.

#Rozpoczęcie pętli foreach.
#Pętla wykonuje się dla każdego wiersza w pliku numbers.csv.
foreach ($Number in $NumbersList){

Set-ADUser -Identity $Number.samaccountname -MobilePhone $Number.telephonenumber
#Przypisanie użytkownikowi w AD numeru telefonu z zaimportowanego pliku.

}

Plik numbers.csv:

"samaccountname","telephonenumber"
"test.user1","145345345"
"test.user2","123123123"
"test.user3","145445661"
"test.user4","125345345"
"test.user6","115213721"
"test.user7","155345345"
"test.user8","176876555"
"test.user9","122533345"
"test.user10","999999999"

Select-Object

Prosta i niezwykle przydatna komenda, która wybiera obiekt lub jego właściwości. W poniższym przykładzie wybierani są użytkownicy, którzy logowali się na swoje konto w ciągu ostatnich 30 dni. Interesuje Cię nazwa użytkownika oraz data ostatniego logowania. – Możesz uzyskać te właściwości właśnie za pomocą Select-Object.

#Skrypt wyświetlający nazwę konta oraz ostatnią datę logowania kont zalogowanych w ciągu ostatnich 30 dni.

Import-Module ActiveDirectory
#Import modułu Active directory.

$Date = (get-date).adddays(-30)
#Utworzenie zmiennej $Date.
#Zmienna zawiera datę 30 dni wstecz.

Get-ADUser -properties * -filter {(lastlogondate -ge $Date)} | Select-Object samaccountname,lastlogondate
#Wybranie kont, których lastlogondate jest późniejszy lub równy $Date.
#Dzięki Select-Object wynik zostanie wyświetlony w postaci:
#samaccountname lastlogondate
#konto1         01.01.2021 01:01:01
#konto2         02.01.2021 02:02:02
#...

Where-Object

Poprzez Where-Object, możesz wybrać interesujące Cię obiekty na podstawie ich atrybutów. Często funkcje komendy Where-Object przejmuje parametr filter. Wykorzystanie filtru znacznie skraca czas wykonania skryptu, lecz nie jest on dostępny dla każdej komendy. W takim wypadku z pomocą przychodzi Where-Object.

#Skrypt wyświetlający konta z departamentu "Test"

Import-Module ActiveDirectory
#Import modułu Active directory.

Get-ADUser -Filter 'Department -eq "Test"'
#Wybieranie kont za pomocą parametru -Filter

Get-ADUser -Properties Department -Filter * | Where-Object Department -eq 'Test'
#Wybieranie kont za pomocą Where-Object.
#W tym wypadku wynik polecenia Get-ADUser jest przesyłany do Where-Object za pomocą pipelne.

Get-ChildItem

Get-ChildItem zwraca pliki znajdujące się w podanych lokalizacjach. Za pomocą tej komendy możesz wyszukiwać pliki lub sprawdzać interesujące Cię właściwości. Poniżej przykład użycia:

#Skrypt wyświetlający zawartość folderu $path wraz z podfolderami.

$path = 'C:\test\*.*'
#W zmiennej path umieszczona jest lokalizacja, która będzie przeszukiwana.


Get-ChildItem -Path $path -Recurse
#Dzięki parametrowi -Recurse, zawartość folderu $path jest przeszukiwana wraz z podfolderami.

Najczęściej używane komendy różnią się w zależności od rozwiązań IT w środowisku pracy. Powyższa lista oparta jest na doświadczeniach administratora IT, pracującego na systemach Windows Server.  Podane przykłady skryptów, po przetestowaniu bez problemu można zastosować w środowisku produkcyjnym. Czy Ty także na co dzień korzystasz z PowerShell’a? Być może warto zastanowić się jakich komend używasz najczęściej?

BLOG

Zobacz inne nasze artykuły

Rozwiązania SOHO – Fortinet

Rozwiązania SOHO – Fortinet

SOHO (Small Office Home Office) jest określeniem rozwiązania, które w kompleksowy i tani sposób zrealizuje wszystkie wymagania IT stawiane małym firmom. Artykuł poświęcony jest najmniejszym urządzeniom serii FortiGate i FortiWiFi czołowego dostawcy rozwiązań...

Windows 11 – rewolucja czy ewolucja?

Windows 11 – rewolucja czy ewolucja?

Nowości i zmiany w Windows 11 Po 6 latach od premiery Windowsa 10, nieoczekiwanie, bez większych zapowiedzi, na początku października został udostępniony Windows 11. Jest on dostępny na chwilę obecną jako darmowa aktualizacja dla użytkowników poprzedniej wersji...

Naprawa błędu 2003f w komputerach Apple

Naprawa błędu 2003f w komputerach Apple

Internet recovery czyli magia Apple w praktyce Jeszcze kilka lat temu komputery Apple w firmach były rzadkością. Jeśli ktoś decydował się na tę alternatywę dla systemu Windows przeważnie stawiał na mityczną bezobsługowość oraz zdecydowanie mniejszą ilość błędów....